2008-08-18 8 views
54

In .NET stehen beim Erstellen eines Projekts, Dateiversion und Assembly Version, zwei Versionsnummern zur Verfügung. Wie benutzt du diese Nummern? Halten Sie sie gleich? Automatisch inkrementieren, aber manuell ändern?Wie kann man Dateiversion und Assembly Version am besten verwenden?

Auch was ist mit dem Attribut AssemblyInformationalVersion?

Ich habe diese Unterstützung gefunden Microsoft Knowledge Base (KB) Artikel, der einige Hilfe zur Verfügung gestellt: How to use Assembly Version and Assembly File Version.

+1

Diese Antwort fasst die besten für die Gemeinschaft nützlich sein können: http://stackoverflow.com/a/65062/244353 – Mrchief

Antwort

14

In einem Szenario, wo ich mehrere Datei Assemblys (dh 1 exe und 5 dlls) habe ich eine andere Dateiversion für jeden verwenden, aber die gleiche Assembly-Version für alle von ihnen, so dass Sie wissen, welche exe jeder der dlls gehen mit.

+2

Was ist, wenn Sie mehrere Exes mit verschiedenen Assembly-Versionen haben, abhängig von einigen DLLs? Dieser Ansatz ist nicht generisch. – surfen

+5

Ich würde vorschlagen, das Gegenteil zu tun. Halten Sie die Assembly-Versionen für jede DLL spezifisch (da dies die Nummer ist, die für .NET und Windows von Bedeutung ist), und verwenden Sie die Dateiversion, um die Release-IDs zu synchronisieren. – BTownTKD

0

Ich behalte sie gleich. Aber dann habe ich keine Multifil-Assemblies, wenn die AssemblyVersion-Nummer wichtig wird. Ich benutze Microsoft-Stil-Datum-Codierung für meine Build-Nummern, anstatt automatisch inkrementieren (ich finde nicht die Anzahl der Male, dass etwas gebaut wurde, um so wichtig zu sein).

+1

Ich bin damit einverstanden, aber manchmal nützlich, seine einen Wert zu haben, der eine Neuerstellung ohne Quellcodeänderungen anzeigt, beispielsweise wenn der Erstellungsbefehl geringfügig geändert wurde, um ein bestimmtes Problem zu beheben. – jpierson

3

@Adam: Ändern Sie die Dateiversion mit jedem Build? Verwenden Sie die Versionskontrolle (SYN oder VSS) und verwenden Sie diese Informationen, um die Quelle wieder mit den Binärdateien zu verknüpfen?

Scheint sinnvoll zu sein, dass die Assembly-Version gleich bleibt. d.h. "2.0.0.0". Das entspricht dem Einsatz des Produkts.

Die Dateiversion wird so geändert, dass sie der Revision aus der Quellcodeverwaltung entspricht. "2.0.??.revision" Dies würde eine Verbindung von einer bestimmten DLL (oder EXE) zu der Quelle, die sie aufgebaut hat, bereitstellen.

73

In Lösungen mit mehreren Projekten, eine Sache, die ich sehr hilfreich gefunden habe, ist, dass alle AssemblyInfo-Dateien auf ein einzelnes Projekt zeigen, das die Versionierung regelt. So haben meine AssemblyInfos eine Linie:

[assembly: AssemblyVersion(Foo.StaticVersion.Bar)] 

Ich habe ein Projekt mit einer einzigen Datei, die die Zeichenfolge erklärt:

namespace Foo 
{ 
    public static class StaticVersion 
    { 
     public const string Bar= "3.0.216.0"; // 08/01/2008 17:28:35 
    } 
} 

Mein automatisierte Build-Prozess ändert sich dann nur diese Zeichenfolge durch Ziehen Sie die aktuellste Version von die Datenbank und inkrementieren die vorletzte Nummer.

Ich ändere nur die Major-Build-Nummer, wenn sich das Feature-Set dramatisch ändert.

Ich ändere die Dateiversion überhaupt nicht.

+7

+1 Schöne Lösung zum Teilen der Versionsnummer. –

22

Der KB-Artikel erwähnt die wichtigste Unterscheidung: Dateiversionen werden nur für Anzeigezwecke verwendet, während die Assemblyversion eine wichtige Rolle im .NET-Ladeverhalten spielt.

Wenn Sie die Versionsnummer der Assembly ändern, hat sich die Identität Ihrer Assembly als Ganzes geändert. Entwickler müssen neu erstellen, um auf Ihre neue Version zu verweisen (es sei denn, Sie stellen einige Richtlinien für die automatische Versionierung ein) und zur Laufzeit werden nur Assemblys mit übereinstimmenden Versionsnummern geladen.

Dies ist wichtig in meiner Umgebung, wo wir eine inkrementierende, gut sichtbare Versionsnummer für Prüfzwecke benötigen, aber wir wollen Entwickler nicht zwingen, neu zu erstellen oder viele Versionen gleichzeitig in Produktion zu haben. In diesem Fall aktualisieren wir für rückwärtskompatible geringfügige Änderungen die Dateiversion, nicht jedoch die Assemblyversion.

12

Dateiversionen werden nur für Anzeigezwecke verwendet, während die Assemblyversion eine wichtige Rolle im .NET-Ladeverhalten spielt.

Nicht ganz. Die Dateiversion ist auch für Windows Installer wichtig, wenn Sie eine vorhandene Version gegenüber einer früheren Version aktualisieren.

11

Mit meiner aktuellen Anwendung, jeder hat VS Projekt einen Link zu einer „AssemblyBuildInfo“ Quelldatei, die die folgenden Eigenschaften hat:

[assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyCompany("Acme Corporationy")] 
[assembly: AssemblyCopyright("Copyright © 2009 Acme Corporation")] 

diese Weise alle Baugruppen in meiner Lösung teilen gleiche Version und Unternehmensinformationen (Das heißt, wenn ich es ändern muss, ändere ich es nur einmal). Wenn Sie die FileVersion ausschließen, wird sie automatisch auf AssemblyVersion gesetzt.

+4

+1 für die Verwendung von "Acme" :) –