Пользовательские атрибуты сборки

Я хотел бы знать, могу ли я определить настраиваемые атрибуты сборки. Существующие атрибуты определяются следующим образом:

[assembly: AssemblyTitle("MyApplication")]  
[assembly: AssemblyDescription("This application is a sample application.")]  
[assembly: AssemblyCopyright("Copyright © MyCompany 2009")]  

Есть ли способ сделать следующее:

[assembly: MyCustomAssemblyAttribute("Hello World! This is a custom attribute.")]

person Charlie Salts    schedule 20.12.2009    source источник
comment
Для всех, кому интересно, AssemblyTitle и т. Д. Находятся в assemblyattributes.cs. Вот источник: referenceource.microsoft.com/#mscorlib/system/reflection/.   -  person mekb    schedule 24.08.2019


Ответы (2)


Да, ты можешь. Мы делаем такие вещи.

[AttributeUsage(AttributeTargets.Assembly)]
public class MyCustomAttribute : Attribute {
    string someText;
    public MyCustomAttribute() : this(string.Empty) {}
    public MyCustomAttribute(string txt) { someText = txt; }
    ...
}

Для чтения используйте такой linq stmt.

var attributes = assembly
    .GetCustomAttributes(typeof(MyCustomAttribute), false)
    .Cast<MyCustomAttribute>();
person Preet Sangha    schedule 20.12.2009
comment
но как это исправить как свойство сборки? - person Sinaesthetic; 22.05.2019
comment
@Sinaesthetic - что ты имеешь в виду? - person Preet Sangha; 24.05.2019
comment
Например, сервер сборки. Чтобы исправить номер сборки, вы должны сделать что-то вроде dotnet build -c Release /p:BuildNumber={BUILD_NUMBER}, поэтому для чего-то вроде этого я ожидаю, что смогу сделать dotnet build -c Release /p:MyCustomAttribute=foo - person Sinaesthetic; 31.05.2019
comment
@Sinaesthetic не могли бы вы понять, как исправить это как свойство сборки? - person mirind4; 17.06.2019

Да, используйте AttributeTargets.Assembly:

[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyAttribute : Attribute { ... }
person Lee    schedule 20.12.2009