Automaticky aktualizovat číslo verze

hlasů
95

Chtěl bych majetkem verze mé žádosti, které mají být zvýšen pro každý sestavení, ale nejsem si jistý, o tom, jak tuto funkci povolit ve Visual Studiu (2005/2008). Snažil jsem se určit AssemblyVersion jako 1.0. * Ale nedostane mi přesně to, co chci.

Jsem také pomocí souboru nastavení av dřívějších pokusech, kdy verze sestava změnila moje nastavení dostal obnovit výchozí hodnoty, protože aplikace hledala konfiguračního souboru do jiného adresáře.

Chtěl bych, aby bylo možné zobrazit číslo verze v podobě 1.1.38, takže když uživatel nalezne problém mohu přihlásit na verzi, kterou používají, stejně jako říct jim inovovat, pokud mají starou verzi.

Stručné vysvětlení toho, jak verzování prací by také ocenil. Kdy sestavení a revizní číslo dostat zvýší?

Položena 03/08/2008 v 12:12
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
85

S „byl postaven v“ věci, nemůžete, protože s použitím 1.0. * Nebo 1.0.0. * Nahradí revizi a čísla sestavení s kódovaným datum / časové razítko, což je obvykle také dobrý způsob.

Více informací naleznete v Assembly Linker dokumentaci v / v tagu.

Co se týče automatické zvyšování čísla, použijte Úkol AssemblyInfo:

AssemblyInfo Task

To může být nakonfigurován tak, aby automaticky zvyšovat číslo sestavení.

K dispozici jsou 2 Gotchas:

  1. Každá ze 4 čísla ve verzi řetězec je omezena na 65535. Jedná se o Windows Omezení a je nepravděpodobné, aby se opravit.
  2. Použití s ​​pomocí Subversion vyžaduje malou změnu:

Načítání se zobrazí číslo verze je pak velmi jednoduché:

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

A objasnit: V .net nebo alespoň v jazyce C #, build je vlastně třetí číslo, není čtvrtá as některými lidmi (například Delphi vývojáře, kteří jsou zvyklí Major.Minor.Release.Build) by se dalo očekávat.

NET, je to Major.Minor.Build.Revision.

Odpovězeno 03/08/2008 v 12:41
zdroj uživatelem

hlasů
19

VS.Net výchozí verze sestavy do 1,0 * a používá následující logiku při automatickém zvyšování:. Nastaví sestavení část na počet dní od 1. ledna 2000, a nastaví revize část s počtem sekund od půlnoci, místní čas, děleno dvěma. Viz tento článek MSDN .

Verze sestava se nachází v souboru AssemblyInfo.vb nebo AssemblyInfo.cs. Ze spisu:

' 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")> 
Odpovězeno 30/09/2008 v 21:58
zdroj uživatelem

hlasů
8

Zjistil jsem, že to funguje dobře jednoduše zobrazit datum poslední sestavení pomocí následujících všude tam, kde je potřeba verze produktu:

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

Než abychom se snažili získat verzi z něco jako následující:

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;
}
Odpovězeno 04/03/2013 v 21:58
zdroj uživatelem

hlasů
6

Jaký zdroj kontrolní systém používáte?

Téměř všechny z nich mají nějakou formu $ Id $ tag, který se rozšířil, když je soubor změnami.

I obvykle používají nějakou formu hackery k zobrazení to jako číslo verze.

Druhou možností je použít k použít datum jako číslo sestavení: 080803-1448

Odpovězeno 03/08/2008 v 19:46
zdroj uživatelem

hlasů
2

[Visual Studio 2017, .csproj vlastnosti]

Chcete-li automaticky aktualizovat svůj majetek PackageVersion / Version / AssemblyVersion (nebo jakýkoli jiný majetek), nejprve vytvořit novou Microsoft.Build.Utilities.Tasktřídu, která bude mít vaše aktuální číslo sestavení a poslat zpět aktualizovaný číslo (doporučuji vytvořit samostatný projekt jen pro tuto třídu).

I ručně aktualizovat MAJOR.MINOR čísla, ale ať MSBuild automaticky aktualizovat číslo sestavení (1.1. 1 , 1.1. 2 , 1.1. 3 , atd. :)

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

}

Obraťte se nedávno vytvořil úlohu v MSBuild proces přidávání další kód na vaší .csproj souboru:

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

Při výběru volby projektu Visual Studio Pack (stačí změnit BeforeTargets="Build"k provedení úkolu před výroby) Tento RefreshVersion kód bude spuštěn pro výpočet nové číslo verze, a XmlPokeúkolem bude odpovídajícím způsobem aktualizovat své .csproj majetek (ano, bude upravit soubor).

Při práci s nuget knihoven také pošlu balíček nuget úložiště pouhým přidáním další sestavení úkol jako v předchozím příkladu.

<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\nugetje místo, kde mám klienta nuget (nezapomeňte uložit klíč nuget API voláním nuget SetApiKey <my-api-key>nebo zahrnout tlačítka na tlačné hovoru nuget).

Jen v případě, že to pomůže někdo ^ _ ^.

Odpovězeno 10/05/2017 v 14:08
zdroj uživatelem

hlasů
1

Před nějakým časem jsem napsal rychlou a špinavou exe, který by aktualizovat verzi # 's v AssemblyInfo {cs / vb} -. Také jsem použil rxfind.exe (jednoduchý a účinný vyhledávač regex založené nahradit nástroj), aby učinili aktualizaci z příkazového řádku v rámci procesu sestavení. Pár dalších helpfule rad:

  1. oddělit AssemblyInfo do části výrobku (název firmy, verze, atd.) a montáž specifických částí (název sestavení atd). viz zde
  2. Také - i používat podvracení, tak jsem zjistil, že je užitečné nastavit číslo sestavení do Subversion číslem revize čímž je rychlé, aby se vždy vrátit do codebase, který vygeneroval sestavu (např 1.4.100.1502 byla postavena z revize 1502).
Odpovězeno 04/08/2008 v 20:51
zdroj uživatelem

hlasů
0

Pokud chcete číslo automatické zvyšování, která aktualizuje pokaždé, když kompilace je hotovo, můžete použít VersionUpdater z pre-build události. Vaše pre-build události může zkontrolovat konfiguraci sestavení, zda si přejete, aby se číslo verze se bude zvyšovat jen pro verzi sestavení (například).

Odpovězeno 28/02/2010 v 22:16
zdroj uživatelem

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