396 Stimmen

Kann ich die Build-Version der Datei automatisch erhöhen, wenn ich Visual Studio verwende?

Ich habe mich nur gefragt, wie ich automatisch den Build (und die Version?) meiner Dateien mit Visual Studio (2005) zu erhöhen.

Wenn ich die Eigenschaften von beispielsweise C:\Windows\notepad.exe Auf der Registerkarte Version wird "Dateiversion: 5.1.2600.2180" angezeigt. Ich möchte diese coolen Zahlen auch in der Version meiner DLLs haben, nicht in der Version 1.0.0.0, die, seien wir ehrlich, ein bisschen langweilig ist.

Ich habe ein paar Dinge ausprobiert, aber es scheint keine Out-of-Box-Funktion zu sein, oder vielleicht suche ich auch nur an der falschen Stelle (wie immer).

Ich arbeite hauptsächlich mit Webprojekten....

Ich habe mir beide angesehen:

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

und ich konnte es nicht glauben, dass so viel Aufwand für eine Sache üblich ist.

EDIT: Es funktioniert nicht in VS2005, soweit ich das beurteilen kann ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )

455voto

Sam Meldrum Punkte 13529

In Visual Studio 2008 funktioniert das Folgende.

Suchen Sie in der Datei AssemblyInfo.cs nach diesen 2 Zeilen:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Sie könnten versuchen, dies zu ändern:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

Dies wird jedoch nicht zum gewünschten Ergebnis führen, sondern zu einer Produktversion von 1.0.* und eine Dateiversion von 1.0.0.0 . Nicht das, was Sie wollen!

Wenn Sie jedoch die zweite dieser Zeilen entfernen und nur noch:

[assembly: AssemblyVersion("1.0.*")]

Dann setzt der Compiler die Dateiversion gleich der Produktversion und Sie erhalten das gewünschte Ergebnis einer automatisch inkrementierten Produkt- und Dateiversion, die synchron sind. Z.B.. 1.0.3266.92689

157voto

Hath Punkte 12288

Öffnen Sie die Datei AssemblyInfo.cs und ändern Sie

// 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")]

a

[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

Sie können dies in der IDE tun, indem Sie zu Projekt -> Eigenschaften -> Baugruppeninformationen gehen

Damit können Sie jedoch nur die Version der Baugruppe automatisch erhöhen und erhalten die

Assembly File Version: Ein Platzhalter ("*") ist in diesem Feld nicht zulässig.

Meldungsfeld, wenn Sie versuchen, einen * in das Feld Dateiversion einzugeben.

Öffnen Sie also einfach die Datei assemblyinfo.cs und führen Sie sie manuell aus.

57voto

Christian Punkte 9445

Eine weitere Möglichkeit, die Versionsnummern in jedem Build zu ändern, ist die Verwendung der Version Aufgabe von MSBuild.Community.Tasks . Laden Sie einfach deren Installationsprogramm herunter, installieren Sie es, passen Sie dann den folgenden Code an und fügen Sie ihn nach <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> in Ihrem .csproj Datei:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
    <Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="Properties\VersionInfo.cs"
                  AssemblyVersion="$(Major).$(Minor)"
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>

Note : Passen Sie die Eigenschaft StartDate an Ihr Gebietsschema an. Derzeit wird die invariante Kultur nicht verwendet.

Für den dritten Build am 14. Januar 2010 wird dadurch ein VersionInfo.cs mit diesem Inhalt:

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]

Diese Datei muss dann dem Projekt hinzugefügt werden (über Vorhandenen Artikel hinzufügen ), und die AssemblyVersion y AssemblyFileVersion Zeilen müssen entfernt werden von AssemblyInfo.cs .

Die verschiedenen Algorithmen zum Ändern der Versionsbestandteile sind beschrieben in $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm y Eigenschaften der Version .

32voto

Boog Punkte 3508

Ich kam mit einer Lösung ähnlich wie Christians, aber ohne auf die Community MSBuild Aufgaben, dies ist keine Option für mich, da ich nicht diese Aufgaben für alle unsere Entwickler installieren möchten.

Ich generiere Code und kompiliere ihn zu einer Assembly und möchte die Versionsnummern automatisch inkrementieren. Ich kann jedoch nicht den VS 6.0.* AssemblyVersion-Trick verwenden, da er die Build-Nummern jeden Tag automatisch erhöht und die Kompatibilität mit Assemblys, die eine ältere Build-Nummer verwenden, unterbricht. Stattdessen möchte ich eine fest kodierte AssemblyVersion, aber eine auto-incrementing AssemblyFileVersion haben. Ich habe dies erreicht, indem ich die AssemblyVersion in der AssemblyInfo.cs angegeben und eine VersionInfo.cs in MSBuild wie folgt erzeugt habe,

  <PropertyGroup>
    <Year>$([System.DateTime]::Now.ToString("yy"))</Year>
    <Month>$([System.DateTime]::Now.ToString("MM"))</Month>
    <Date>$([System.DateTime]::Now.ToString("dd"))</Date>
    <Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
    <AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
    </WriteLinesToFile>
  </Target>

Dadurch wird eine VersionInfo.cs-Datei mit einem Assembly-Attribut für AssemblyFileVersion erzeugt, wobei die Version dem Schema JJ.MM.TT.TTTT mit dem Erstellungsdatum folgt. Sie müssen diese Datei in Ihr Projekt aufnehmen und mit ihr bauen.

20voto

Rahul Punkte 2031

Es gibt eine Visual Studio-Erweiterung Automatische Versionen die Visual Studio (2012, 2013, 2015, 2017 und 2019) unterstützt.

Bildschirmfotos enter image description here

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X