Ich fand die Antwort ursprünglich here. Ich wiederhole die Details zur leichteren Bezugnahme.
Es gibt drei ‚Versionen‘, die in der AssemblyInfo.cs-Datei enthalten sein können:
[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]
AssemblyInformationalVersion
standardmäßig AssemblyFileVersion
wenn er nicht angegeben. Ebenso sind AssemblyInformationalVersion
undAssemblyFileVersion
Standard zu AssemblyVersion
, wenn beide nicht angegeben sind.
In Ihrem Beispiel enthielt die Datei AssemblyInfo.cs keine AssemblyInformationalVersion
, daher wird standardmäßig der Wert AssemblyFileVersion
verwendet. Wie Sie unten sehen werden, wird AssemblyInformationalVersion
der Eigenschaft FileVersionInfo.ProductVersion
zugeordnet, was erklärt, warum der Test wahr ist.
Offensichtlich gibt es ein paar frustrierende Aspekte. Erstens gibt es keine Möglichkeit (die ich kenne), die AssemblyInformationalVersion
von Visual Studio zu setzen. Sie müssen die Datei AssemblyInfo.cs direkt ändern, um dieses Attribut einzuschließen. Zweitens, AssemblyInformationalVersion
Karten auf die FileVersionInfo.ProductVersion
Eigenschaft, die nicht intuitiv ist. Das Attribut sollte besser AssemblyProductVersion
heißen.
Wie gesagt, wie erhalten wir diese Werte im Code? Wie folgt aus:
AssemblyFileVersion => System.Diagnostics.FileVersionInfo.FileVersion
AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion
AssemblyVersion => System.Reflection.Assembly.Version
Im Falle AssemblyVersion
, verwenden Sie diese:
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();
... und was ist die Frage? – Vlad
geklärt, danke :-) – ecoffey