Αυτόματη ενημέρωση αριθμό έκδοσης

ψήφοι
95

Θα ήθελα ιδιοκτησία έκδοση της εφαρμογής μου να αυξάνεται για κάθε κατασκευή, αλλά δεν είμαι σίγουρος για το πώς να ενεργοποιήσετε αυτήν τη λειτουργία στο Visual Studio (2005/2008). Έχω προσπαθήσει να καθορίσετε το AssemblyVersion ως 1,0. *, Αλλά δεν με πάρει ακριβώς αυτό που θέλω.

Είμαι, επίσης, χρησιμοποιώντας ένα αρχείο ρυθμίσεων και σε προηγούμενες προσπάθειες, όταν η έκδοση συγκρότημα αλλάξει τις ρυθμίσεις μου πήρε επαναφέρετε την προεπιλεγμένη δεδομένου ότι η εφαρμογή κοίταξε για το αρχείο ρυθμίσεων σε άλλο κατάλογο.

Θα ήθελα να είναι σε θέση να εμφανίσει έναν αριθμό έκδοσης, με τη μορφή της 01.01.38 έτσι ώστε όταν ένας χρήστης βρίσκει ένα πρόβλημα που μπορεί να καταγράψει την έκδοση που χρησιμοποιείτε, καθώς και να τους πούμε για την αναβάθμιση αν έχουν μια παλιά έκδοση.

Μια σύντομη επεξήγηση του τρόπου λειτουργίας εκδόσεων θα πρέπει επίσης να εκτιμηθεί. Όταν ο αριθμός κατασκευής και την αναθεώρηση να αυξάνεται;

Δημοσιεύθηκε 03/08/2008 στις 12:12
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
85

Με το «χτίστηκε το» πράγματα, δεν μπορείτε, όπως με τη χρήση 1.0. * Ή 1.0.0. * Θα αντικαταστήσει την αναθεώρηση και την οικοδόμηση αριθμούς με ένα κωδικοποιημένο ημερομηνία / χρονική σήμανση, η οποία συνήθως είναι επίσης ένας καλός τρόπος.

Για περισσότερες πληροφορίες, δείτε το Συνέλευση Linker Τεκμηρίωσης στο / v ετικέτα.

Όσο για αυτόματη προσαύξηση αριθμούς, χρησιμοποιήστε το AssemblyInfo εργασιών:

AssemblyInfo Εργασία

Αυτό μπορεί να ρυθμιστεί ώστε να αυξήσετε αυτόματα τον αριθμό build.

Υπάρχουν 2 gotchas:

  1. Κάθε ένας από τους 4 αριθμούς στη σειρά έκδοσης είναι περιορισμένη σε 65535. Αυτό είναι το Windows Περιορισμός και είναι απίθανο να διορθώνονται.
  2. Χρήση με με ανατροπή απαιτεί μια μικρή αλλαγή:

Ανάκτηση ο αριθμός έκδοσης είναι τότε αρκετά εύκολο:

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

Και, για να διευκρινίσει: Σε .net ή τουλάχιστον σε C #, η συγκέντρωση είναι στην πραγματικότητα ο τρίτος αριθμός, όχι το τέταρτο και κάποιους ανθρώπους (για παράδειγμα, τους Δελφούς προγραμματιστές που έχουν συνηθίσει να Major.Minor.Release.Build) θα περίμενε κανείς.

Σε .net, είναι Major.Minor.Build.Revision.

Απαντήθηκε 03/08/2008 στις 12:41
πηγή χρήστη

ψήφοι
19

VS.NET προεπιλογές την έκδοση Συνέλευση στο 1,0 * και χρησιμοποιεί την εξής λογική όταν αυτόματη προσαύξηση. Καθορίζει το τμήμα κατασκευής προς τον αριθμό των ημερών από την 1η Ιανουαρίου 2000, και θέτει το πλαίσιο αναθεώρησης του αριθμού των δευτερολέπτων από τα μεσάνυχτα, τοπική ώρα, διαιρείται δια δύο. Δείτε αυτό το άρθρο MSDN .

έκδοση Συνέλευση βρίσκεται σε ένα αρχείο assemblyinfo.vb ή assemblyinfo.cs. Από το αρχείο:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
Απαντήθηκε 30/09/2008 στις 21:58
πηγή χρήστη

ψήφοι
8

Έχω διαπιστώσει ότι λειτουργεί καλά για να εμφανιστεί απλώς την ημερομηνία της τελευταίας κατασκευής, χρησιμοποιώντας τα ακόλουθα, όπου απαιτείται έκδοση του προϊόντος:

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

Αντί να προσπαθεί να πάρει την έκδοση από κάτι σαν το παρακάτω:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}
Απαντήθηκε 04/03/2013 στις 21:58
πηγή χρήστη

ψήφοι
6

Τι λογισμικού σύστημα ελέγχου χρησιμοποιείτε;

Σχεδόν όλοι τους έχουν κάποια μορφή $ Id tag $ που παίρνει επεκτάθηκε όταν το αρχείο ελέγχεται.

Συνήθως χρησιμοποιώ κάποια μορφή hackery για να εμφανιστεί αυτό ως τον αριθμό έκδοσης.

Η άλλη εναλλακτική λύση είναι να χρησιμοποιήσετε για να χρησιμοποιήσετε την ημερομηνία και τον αριθμό κατασκευής: 080803-1448

Απαντήθηκε 03/08/2008 στις 19:46
πηγή χρήστη

ψήφοι
2

[Visual Studio 2017, .csproj ιδιότητες]

Για να ενημερώσετε αυτόματα το ακίνητο PackageVersion / Έκδοση / AssemblyVersion σας (ή οποιαδήποτε άλλη περιουσία), πρώτα, να δημιουργήσει μια νέα Microsoft.Build.Utilities.Taskκατηγορία που θα πάρει τρέχοντα αριθμό build σας και να το στείλετε πίσω το επικαιροποιημένο αριθμό (συστήνω να δημιουργήσει ένα ξεχωριστό έργο μόνο για την εν λόγω κατηγορία).

Θα χειροκίνητα ενημέρωση των MAJOR.MINOR αριθμούς, αλλά ας MSBuild να ενημερώνει αυτόματα τον αριθμό κατασκευής (1.1. 1 , 1.1. 2 , 1.1. 3 , κλπ :)

using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;

public class RefreshVersion : Microsoft.Build.Utilities.Task
{
    [Output]
    public string NewVersionString { get; set; }
    public string CurrentVersionString { get; set; } 

    public override bool Execute()
    {       
        Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");

        DateTime d = DateTime.Now;
        NewVersionString = new Version(currentVersion.Major, 
            currentVersion.Minor, currentVersion.Build+1).ToString();
        return true;
    }

}

Στη συνέχεια, καλέστε σας δημιουργήθηκε πρόσφατα εργασιών σχετικά με τη διαδικασία MSBuild προσθήκη του επόμενου κώδικα στο αρχείο .csproj σας:

<Project Sdk="Microsoft.NET.Sdk">    
...
<UsingTask TaskName="RefreshVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\<dll path>\BuildTasks.dll" />
<Target Name="RefreshVersionBuildTask" BeforeTargets="Pack" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
   <RefreshVersion CurrentVersionString="$(PackageVersion)">
          <Output TaskParameter="NewVersionString" PropertyName="NewVersionString" />             
   </RefreshVersion>
   <Message Text="Updating package version number to $(NewVersionString)..." Importance="high" />
   <XmlPoke XmlInputPath="$(MSBuildProjectDirectory)\mustache.website.sdk.dotNET.csproj" Query="/Project/PropertyGroup/PackageVersion" Value="$(NewVersionString)" />
</Target>
...
<PropertyGroup>
 ..
 <PackageVersion>1.1.4</PackageVersion>
 ..

Όταν διαλέγετε την επιλογή Visual Studio έργου Pack (μόλις αλλάξει BeforeTargets="Build"για την εκτέλεση του έργου πριν Build) ο κωδικός RefreshVersion θα ενεργοποιηθεί για τον υπολογισμό του νέο αριθμό έκδοσης, και XmlPokeτο έργο θα ενημερώσει αναλόγως .csproj ιδιοκτησία σας (ναι, θα τροποποιήσει το αρχείο).

Κατά την εργασία με βιβλιοθήκες NuGet, μπορώ επίσης να στείλει το πακέτο για να NuGet αποθετήριο με απλά προσθέτοντας το επόμενο έργο κατασκευής με το προηγούμενο παράδειγμα.

<Message Text="Uploading package to NuGet..." Importance="high" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\bin\release" Command="c:\nuget\nuget push *.nupkg -Source https://www.nuget.org/api/v2/package" IgnoreExitCode="true" />

c:\nuget\nugetείναι όπου έχω τον πελάτη NuGet (θυμηθείτε να αποθηκεύσετε το κλειδί σας NuGet API καλώντας nuget SetApiKey <my-api-key>ή να συμπεριλάβετε το κλειδί για την κλήση push NuGet).

Ακριβώς σε περίπτωση που βοηθά κάποιος ^ _ ^.

Απαντήθηκε 10/05/2017 στις 14:08
πηγή χρήστη

ψήφοι
1

Πριν από λίγο καιρό έγραψα μια γρήγορη και βρώμικη exe που θα ενημερώσετε την έκδοση # 's σε AssemblyInfo {cs / vb} -. Επίσης, έχουν χρησιμοποιηθεί rxfind.exe (μια απλή και ισχυρή τυπική έκφραση που βασίζεται αναζήτηση αντικαταστήσει εργαλείο) να κάνουν το ενημέρωση από τη γραμμή εντολών, στο πλαίσιο της διαδικασίας κατασκευής. Ένα ζευγάρι των άλλων συμβουλές helpfule:

  1. διαχωρισμό του AssemblyInfo σε τμήματα του προϊόντος (το όνομα της εταιρείας, έκδοσης, κλπ) και το συγκρότημα συγκεκριμένα μέρη (όνομα συναρμολόγησης κλπ). δείτε εδώ
  2. Επίσης - μπορώ να χρησιμοποιήσω την ανατροπή, έτσι το βρήκα χρήσιμο να ορίσετε τον αριθμό build στον αριθμό αναθεώρησης ανατροπή καθιστώντας έτσι πολύ εύκολο να έχετε πάντα πίσω στη βάση κώδικα που δημιουργείται το συγκρότημα (π.χ. 1.4.100.1502 χτίστηκε από αναθεώρηση 1502).
Απαντήθηκε 04/08/2008 στις 20:51
πηγή χρήστη

ψήφοι
0

Αν θέλετε έναν αριθμό επαύξησης που αυτοκινήτων που ενημερώνει κάθε φορά μια συλλογή γίνεται, μπορείτε να χρησιμοποιήσετε VersionUpdater από μια εκδήλωση προ-κατασκευή. Εκδήλωση προ-κατασκευή σας μπορεί να ελέγχει τη διαμόρφωση κατασκευής, αν προτιμάτε, έτσι ώστε ο αριθμός έκδοσης θα αυξάνεται μόνο για την κατασκευή Τύπου (για παράδειγμα).

Απαντήθηκε 28/02/2010 στις 22:16
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more