In .NET gibt es dabei mehrere “Versionen”:
- AssemblyVersion (AssemblyName.Version) -> die “CLR-Version” der Assembly (wichtig für Binding).
- FileVersion -> Windows-Dateiversion (steht in den Dateieigenschaften).
- InformationalVersion -> meißtens die “Produkt-/SemVer”-Version (z. B. 1.2.3+gitsha), die man typischerweise anzeigen will.
AssemblyVersion
using System.Reflection;
var version = Assembly.GetExecutingAssembly().GetName().Version;
Console.WriteLine(version); // z.B. 1.2.3.0
FileVersion/ProductVersion
using System.Diagnostics;
using System.Reflection;
var asm = Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly();
var info = FileVersionInfo.GetVersionInfo(asm.Location);
Console.WriteLine(info.FileVersion); // FileVersion
Console.WriteLine(info.ProductVersion); // ProductVersion
Informational Version
using System.Reflection;
var asm = Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly();
var informational = asm
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?
.InformationalVersion;
Console.WriteLine(informational);Welche Version wo anzeigen?
UI/“About”: meist InformationalVersion oder ProductVersion
technisch (Binding/Kompatibilität): AssemblyVersion
Windows Explorer “Dateiversion”: FileVersion
Die Version kannst du in der .csproj Datei festlegen.
<PropertyGroup>
<Version>1.2.3</Version>
<AssemblyVersion>1.2.0.0</AssemblyVersion>
<FileVersion>1.2.3.0</FileVersion>
<InformationalVersion>1.2.3+build.45</InformationalVersion>
</PropertyGroup>