Получить the.NET значение AssemblyInformationalVersion сборки?


каков синтаксис C# для получения сборки AssemblyInformationalVersion значение атрибута во время выполнения? Пример:

[assembly: AssemblyInformationalVersion("1.2.3.4")]

8 59

8 ответов:

using System.Reflection.Assembly  
using System.Diagnostics.FileVersionInfo

// ...

public string GetInformationalVersion(Assembly assembly) {
    return FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;
}
var attr = Assembly
    .GetEntryAssembly()
    .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false) 
    as AssemblyInformationalVersionAttribute[];

это массив AssemblyInformationalVersionAttribute. Он никогда не является нулевым, даже если нет атрибута искомого типа.

var attr2 = Attribute
    .GetCustomAttribute(
        Assembly.GetEntryAssembly(), 
        typeof(AssemblyInformationalVersionAttribute)) 
    as AssemblyInformationalVersionAttribute;

это может быть null, если атрибут отсутствует.

var attr3 = Attribute
    .GetCustomAttributes(
         Assembly.GetEntryAssembly(), 
         typeof(AssemblyInformationalVersionAttribute)) 
    as AssemblyInformationalVersionAttribute[];

то же, что и первый.

используя известный тип в вашем приложении вы можете просто сделать это:

using System.Reflection;

public static readonly string ProductVersion = typeof(MyKnownType).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;

конечно, любой процесс, который вы используете, чтобы добраться до сборки, к которой применяется ваш атрибут, хорош. Обратите внимание, что это не зависит от System.Diagnostics или WinForm это

даже если вопрос немного старая:

Я предлагаю другое решение, которое работает для меня:

Application.ProductVersion
AssemblyInformationalVersionAttribute attribute = 
   (AssemblyInformationalVersionAttribute)Assembly.GetExecutingAssembly()
   .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false).FirstOrDefault();

if (attribute != null)
     Console.WriteLine(attribute.InformationalVersion);

в дополнение к ответу Лэнса: вы можете использовать Application.ResourceAssembly.Location чтобы узнать путь к файлу вашей сборки. С помощью этого можно получить строку AssemblyInformationalVersion всего за одну строку

System.Diagnostics.FileVersionInfo.GetVersionInfo(Application.ResourceAssembly.Location).ProductVersion

построение ответа @Aerthal, если вы хотите, чтобы один лайнер получил атрибут AssemblyInformationalVersionAttribute из представления MVC Razor:

@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion