Как получить версию файла сборки

В AssemblyInfo имеются две версии сборки:

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

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

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

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

Ответ 1

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

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;

Ответ 2

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

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;

Ответ 3

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

versionlabel.Text = "Version " + Application.ProductVersion;

Ответ 4

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

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

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


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

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

Ответ 5

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

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

Или это:

new Version(System.Windows.Forms.Application.ProductVersion);

Ответ 6

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