C# 有条件地设置程序集级别属性

C# 有条件地设置程序集级别属性,c#,.net,attributes,assemblies,C#,.net,Attributes,Assemblies,我想根据从配置文件读取的值有条件地设置程序集级属性。可能吗 我了解到属性是静态元数据,因此虽然数据本身可以在运行时更改,但在应用程序启动后,这些更改不适用 我还有别的选择吗 更新 我的目标:我想做什么 我正在使用TraceAttribute来跟踪所有方法的入口和出口点。我想根据配置文件中的值在程序集级别打开或关闭此属性。大多数情况下我都希望关闭它,但只有在紧急情况下才打开它,以便从特定环境中收集问题的证据。尝试使用 #ifdef TRACE [TraceAttribute()] #endif M

我想根据从配置文件读取的值有条件地设置程序集级属性。可能吗

我了解到属性是静态元数据,因此虽然数据本身可以在运行时更改,但在应用程序启动后,这些更改不适用

我还有别的选择吗

更新

我的目标:我想做什么

我正在使用TraceAttribute来跟踪所有方法的入口和出口点。我想根据配置文件中的值在程序集级别打开或关闭此属性。大多数情况下我都希望关闭它,但只有在紧急情况下才打开它,以便从特定环境中收集问题的证据。

尝试使用

#ifdef TRACE
[TraceAttribute()]
#endif
MethodBeingTraced()
{
}

在项目配置级别定义跟踪变量

我认为这里的答案不止这些:

我仍然不确定为什么需要绑定程序集级属性和配置键,但可以将配置键传递给属性的构造函数/属性,并在属性逻辑中解析其值。它看起来像:

[AttributeUsage(AttributeTargets.Assembly)]
public class TraceAttribute : Attribute
{
    public TraceAttribute(string traceConfigKey)
    {
        var keyValue = ConfigurationManager.AppSettings[traceConfigKey];

        DoTracing = !string.IsNullOrEmpty(keyValue) && bool.Parse(keyValue);
    }

    /// <summary>
    /// Use this property for your tracing conditional logic.
    /// </summary>
    public bool DoTracing { get; private set; }
}
和配置文件:

<appSettings>
  <add key="DoTracing" value="true"/>
</appSettings>

当然,它需要重新编译项目。

请解释为什么要基于某些配置值设置属性。你想达到什么目标?我已经更新了我的问题,将目标包括在内。太好了!现在,为什么我没有想到这一点。
<appSettings>
  <add key="DoTracing" value="true"/>
</appSettings>
#if TRACE
[assembly: Trace()]
#endif