Как я могу получить версию файла сборки - PullRequest
655 голосов
/ 26 мая 2009

В AssemblyInfo есть две версии сборки:

  1. AssemblyVersion: укажите версию атрибутивной сборки.
  2. AssemblyFileVersion: Указывает компилятору использовать определенный номер версии для ресурса версии файла Win32. Версия файла Win32 не обязательно должна совпадать с номером версии сборки.

Я могу получить Assembly Version со следующей строкой кода:

Version version = Assembly.GetEntryAssembly().GetName().Version;

Но как я могу получить Assembly File Version?

Ответы [ 6 ]

800 голосов
/ 26 мая 2009

См. Мой комментарий выше с просьбой разъяснить, что вы действительно хотите. Надеюсь, это оно:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
179 голосов
/ 22 октября 2009

Существует три версии : сборка , файл и product Они используются разными функциями и принимают разные значения по умолчанию, если вы не укажете их явно.

string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
string assemblyVersion = Assembly.LoadFile('your assembly file').GetName().Version.ToString(); 
string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; 
string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
60 голосов
/ 25 февраля 2013

Когда я хочу получить доступ к версии файла приложения (что установлено в Сборочной информации -> Версия файла), скажем, чтобы установить для него текст метки при загрузке формы для отображения версии, я только что использовал

versionlabel.Text = "Version " + Application.ProductVersion;
20 голосов
/ 26 мая 2009

ОБНОВЛЕНИЕ: Как упоминал Ричард Граймс в моем цитируемом посте , @Iain и @Dmitry Lobanov, мой ответ верен в теории, но неверен на практике.

Как я должен был помнить из бесчисленных книг и т. Д., Хотя кто-то устанавливает эти свойства с помощью [assembly: XXXAttribute], они компилятором подвергаются сильному захвату и помещаются в ресурс VERSIONINFO.

По вышеуказанной причине вам нужно использовать подход в @ ответ Сяофу , поскольку атрибуты удаляются после извлечения сигнала из них.


public static string GetProductVersion()
{
  var attribute = (AssemblyVersionAttribute)Assembly
    .GetExecutingAssembly()
    .GetCustomAttributes( typeof(AssemblyVersionAttribute), true )
    .Single();
   return attribute.InformationalVersion;
}

http://bytes.com/groups/net/420417-assemblyversionattribute - как уже отмечалось, если вы ищете другой атрибут, замените его на вышеприведенный)

3 голосов
/ 19 июня 2016

Используйте это:

((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
    Assembly.GetExecutingAssembly(), 
    typeof(AssemblyFileVersionAttribute), false)
).Version;

Или это:

new Version(System.Windows.Forms.Application.ProductVersion);
0 голосов
/ 11 сентября 2012

Вы можете получить версию сборки с My.Application.Info.Version

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...