1

構成ファイルから読み取った値に基づいて、条件付きでアセンブリレベル属性を設定したいと思います。出来ますか?

属性は静的メタデータであるため、実行時にデータ自体を変更することはできますが、アプリケーションの開始後に変更を適用することはできません。

他にどのような選択肢がありますか?

アップデート

私の目的:私がやろうとしていること

TraceAttributeを使用して、すべてのメソッドの開始点と終了点をトレースしています。構成ファイルの値に基づいて、アセンブリレベルでこの属性のオンとオフを切り替えたいと思います。ほとんどの場合オフにしたいのですが、特定の環境から問題の証拠を収集するために、緊急時にのみオンにします。

4

2 に答える 2

2

ここで答えた以上のものだと思います: C#で属性を動的に追加できますか?

アセンブリ レベルの属性と構成キーをバインドする必要がある理由はまだわかりませんが、構成キーを属性のコンストラクター/プロパティに渡し、その値を属性ロジック内で解決できます。次のようになります。

[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; }
}

次に、AssemblyInfo で:

[assembly: Trace("DoTracing")]

そして設定ファイル:

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

別の解決策として、既存の属性を使用し、それをカスタマイズできない場合は、条件付きコンパイル シンボルをプロジェクト プロパティに追加して、次のように記述することもできます。

#if TRACE
[assembly: Trace()]
#endif

もちろん、プロジェクトの再コンパイルが必要です。

于 2013-02-11T13:08:08.310 に答える
0

使ってみて

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

プロジェクト構成レベルで TRACE 変数を定義する

于 2013-02-11T12:53:24.223 に答える