Подтвердить что ты не робот

Получите сборку .NET Assembly AssemblyInformationalVersion?

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

[assembly: AssemblyInformationalVersion("1.2.3.4")]

4b9b3361

Ответ 1

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

// ...

public string GetInformationalVersion(Assembly assembly) {
    return FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;
}

Ответ 2

var attr = Assembly
    .GetEntryAssembly()
    .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false) 
    as AssemblyInformationalVersionAttribute[];

Это массив AssemblyInformationalVersionAttribute. Он не всегда имеет значение null, даже если атрибут искомого типа отсутствует.

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

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

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

Аналогично первой.

Ответ 3

Даже если вопрос немного старый:

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

Application.ProductVersion

Ответ 4

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

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

Ответ 5

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

using System.Reflection;

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

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

Ответ 6

Чтобы дополнить ответ lance: вы можете использовать Application.ResourceAssembly.Location, чтобы узнать путь к файлу вашей сборки. Благодаря этому можно получить строку AssemblyInformationalVersion только в одной строке

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

Ответ 8

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

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