Automatikus frissítése verziószám

szavazat
95

Szeretném, ha a változat tulajdonát én kérelmet kell megnövelni, építmények, de nem vagyok benne biztos, hogy hogyan engedélyezze ezt a funkciót a Visual Studio (2005/2008). Megpróbáltam, hogy meghatározza a AssemblyVersion mint 1,0. * De nem értem pontosan mit akarok.

Én is egy beállítási fájlt, és a korábbi próbálkozások, amikor a szerelvény változat módosítottam a beállításokat kapott visszaállnak az alapértelmezett alkalmazása óta kereste a beállítások fájlt egy másik könyvtárba.

Szeretném tudni, hogy megjelenjen a verziószámot formájában 1.1.38 így amikor a felhasználó valamilyen problémát talál tudok bejelentkezni a verziót ezek segítségével, valamint a nekik frissíteni, ha van egy régi kiadás.

Egy rövid magyarázat arra, hogy a verzióarchiválási művek is nyilvánvaló. Mikor jelenik meg az építmények és revíziószámot kap növekszik?

A kérdést 03/08/2008 12:12
a forrás felhasználó
Más nyelveken...                            


7 válasz

szavazat
85

A „beépített” dolog, nem lehet, mint 1,0. * Vagy 1.0.0. * Váltja felülvizsgálatát és buildszámmal egy kódolt dátum / időbélyeg, ami általában is egy jó módja.

További információkért lásd a Közgyűlés Linker dokumentáció a / v tag.

Ami automatikusan megnő számok, használja a AssemblyInfo Feladat:

AssemblyInfo Task

Ezt be lehet állítani, hogy automatikusan növeli a build számot.

Van 2 Gotchas:

  1. Mind a 4 számot a verzió sztring korlátozódik 65535. Ez a Windows korlátozása, és nem valószínű, hogy fix.
  2. Használat Subversion igényel egy kis változás:

Visszakeresése a program verziószáma, akkor nagyon egyszerű:

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);

És, hogy tisztázza: .NET vagy legalábbis C #, a build valójában a harmadik szám, nem a negyedik, mint egyesek (például Delphi fejlesztők, akik arra használják, hogy Major.Minor.Release.Build) várnánk.

.NET, ez Major.Minor.Build.Revision.

Válaszolt 03/08/2008 12:41
a forrás felhasználó

szavazat
6

Mi forrás kontroll rendszert használ?

Szinte mindegyikük rendelkezik valamilyen $ Id $ elem, hogy lesz bővíteni, ha a fájl be van jelölve.

Szoktam használni valamilyen formában ügyeskedés megjelenítéséhez ezt a verziószámot.

A másik alternatíva használható használható a dátumot, mint a build száma: 080803-1448

Válaszolt 03/08/2008 19:46
a forrás felhasználó

szavazat
1

Néhány évvel ezelőtt írtam egy gyors és piszkos exe, amely frissíti a változat # 's egy assemblyinfo. {Cs / vb} - én is használtam rxfind.exe (egy egyszerű és hatékony reguláris-alapú keresés cserélje eszköz), hogy ezt a frissíteni a parancssorból részeként a fordítást. Egy pár más helpfule tanácsok:

  1. külön a assemblyinfo a terméket rész (a cég neve, verziója, stb), és szerelvény egyes részekhez (összeszerelési neve, stb). Lásd itt
  2. Szintén - én használ felforgatás, így találtam hasznosnak beállítani a build számot felforgatás felülvizsgálat száma ezáltal nagyon könnyű mindig vissza a codebase generált az összeállítás (pl 1.4.100.1502 épült felülvizsgálata 1502).
Válaszolt 04/08/2008 20:51
a forrás felhasználó

szavazat
19

VS.NET alapértékekre a Közgyűlés verzió 1.0. *, És használja a következő logika, ha az automatikus növelésével: ez határozza meg a build része a napok száma január 1-től, 2000 és beállítja a felülvizsgálat részeként a másodpercek száma éjfél óta, helyi idő osztani kettővel. Lásd ezt MSDN cikket .

Assembly változata található egy assemblyinfo.vb vagy assemblyinfo.cs fájlt. A file:

' 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")> 
Válaszolt 30/09/2008 21:58
a forrás felhasználó

szavazat
0

Ha azt szeretné, hogy az automatikus megnövelését szám frissül, amikor egy összeállítás történik, akkor VersionUpdater egy pre-build esemény. A pre-build esetén ellenőrizheti az építmények konfigurációt, ha úgy tetszik, hogy a verziószám csak akkor növekszik a Release építmények (például).

Válaszolt 28/02/2010 22:16
a forrás felhasználó

szavazat
8

Úgy találtam, hogy jól működik, hogy egyszerűen megjelenjen a dátum az utolsó fordítás az alábbi bárhol a termék verziója szükséges:

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

Ahelyett, hogy megpróbálták, hogy a verziószám valami hasonló a következők:

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;
}
Válaszolt 04/03/2013 21:58
a forrás felhasználó

szavazat
2

[Visual Studio 2017 .csproj tulajdonságok]

Ahhoz, hogy automatikusan frissíti a PackageVersion / változat / AssemblyVersion tulajdonság (vagy bármely más tulajdonság), először hozzon létre egy új Microsoft.Build.Utilities.Taskosztályt, hogy megkapja az aktuális build számot, és küldje vissza a frissített száma (javaslom, hogy hozzon létre egy külön projekt csak az adott osztály).

Azt manuálisan frissíteni a MAJOR.MINOR számokat, de most MSBuild automatikusan frissíti a buildszámot (1.1. 1 , 1.1. 2. , 1.1. 3 , stb :)

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;
    }

}

Akkor hívja a nemrégiben létrehozott Feladat MSBuild folyamat a következő hozzáadása kódot .csproj file:

<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>
 ..

Amikor a szedés Visual Studio Pack projekt opció (csak megváltoztatni a BeforeTargets="Build"végrehajtásához a feladat előtt Egyesítés) a RefreshVersion kód indul számítani az új verziószámot, XmlPokefeladat frissíti az .csproj tulajdon ennek megfelelően (igen, akkor a fájlt).

Amikor dolgozik NuGet könyvtárak, én is küldeni a csomagot NuGet adattárában csak hozzá a következő építmények feladat az előző példában.

<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\nugetahol már a NuGet kliens (emlékszik, hogy mentse a NuGet API kulcsot hívja nuget SetApiKey <my-api-key>, vagy tartalmazza a kulcsot a NuGet push hívással).

Csak abban az esetben, ha segít valaki ^ _ ^.

Válaszolt 10/05/2017 14:08
a forrás felhasználó

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