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

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

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

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

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

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

6 ответов


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

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

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

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;

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

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

UPDATE: как упоминалось Ричардом Граймсом в мой процитированный пост, @Iain и @Dmitry Lobanov, мой ответ верен в теории, но ошибочен на практике.

как я должен был запомнить из бесчисленных книг и т. д., в то время как эти свойства задаются с помощью [assembly: XXXAttribute], они получают highjacked компилятором и помещаются в 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 - Как уже отмечалось, Если вы ищете другой атрибут, замените его на приведенный выше)


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

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

или такой:

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

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