【问题标题】:Custom Assembly Attributes自定义程序集属性
【发布时间】:2013-06-28 22:09:24
【问题描述】:

我想知道是否可以定义自定义程序集属性。现有属性的定义方式如下:

[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.")]

【问题讨论】:

标签: c# .net assemblies attributes


【解决方案1】:

是的,你可以。我们做这种事情。

[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>();

【讨论】:

  • 但是如何将其作为构建属性修补?
  • @Sinaesthetic - 你是什么意思?
  • 例如构建服务器。要修补内部版本号,您需要执行 dotnet build -c Release /p:BuildNumber={BUILD_NUMBER} 之类的操作,因此对于此类操作,我希望能够执行 dotnet build -c Release /p:MyCustomAttribute=foo
  • @Sinaesthetic 您能弄清楚如何将其修补为构建属性吗?
  • 将属性添加到 csproj,从 build 命令中的属性设置参数。 &lt;ItemGroup&gt; &lt;AssemblyAttribute Include="MyCustomAttribute"&gt; &lt;_Parameter1&gt;$(MyCustomAttribute)&lt;/_Parameter1&gt; &lt;/AssemblyAttribute&gt; &lt;/ItemGroup&gt;
【解决方案2】:

是的,使用 AttributeTargets.Assembly:

[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyAttribute : Attribute { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多