Я нашел ответ изначально здесь . Я повторяю детали для удобства пользования.
В файл AssemblyInfo.cs можно включить три «версии»:
[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]
AssemblyInformationalVersion
по умолчанию AssemblyFileVersion
, если оно не указано. Аналогично, AssemblyInformationalVersion
и AssemblyFileVersion
по умолчанию равны AssemblyVersion
, если оба не указаны.
В вашем примере файл AssemblyInfo.cs не содержит AssemblyInformationalVersion
, поэтому по умолчанию используется значение AssemblyFileVersion
. Как вы увидите ниже, AssemblyInformationalVersion
сопоставляется со свойством FileVersionInfo.ProductVersion
, что объясняет, почему тест возвращает true.
Очевидно, в этом есть пара неприятных моментов. Во-первых, нет способа (о котором я знаю) установить AssemblyInformationalVersion
из Visual Studio. Вы должны изменить файл AssemblyInfo.cs напрямую, чтобы включить этот атрибут. Во-вторых, AssemblyInformationalVersion
отображается на свойство FileVersionInfo.ProductVersion
, которое не является интуитивно понятным. Атрибут должен быть более правильно назван AssemblyProductVersion
. И, очевидно, title также является описанием и т. Д.
Тем не менее, как мы можем получить эти (и связанные) значения в коде? Как это:
AssemblyFileVersion => System.Diagnostics.FileVersionInfo.FileVersion
AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion
AssemblyVersion => System.Reflection.Assembly.Version
/// others...
AssemblyTitle => System.Diagnostics.FileVersionInfo.FileDescription
AssemblyDescription => System.Diagnostics.FileVersionInfo.Comments
AssemblyProduct => System.Diagnostics.FileVersionInfo.ProductName
AssemblyCompany => System.Diagnostics.FileVersionInfo.CompanyName
AssemblyCopyright => System.Diagnostics.FileVersionInfo.LegalCopyright
AssemblyTrademark => System.Diagnostics.FileVersionInfo.LegalTrademarks
В случае AssemblyVersion
используйте это:
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();