2013-06-12 8 views
7

カスタム廃止されたクラスを作成できるかどうかは疑問でした。私はそれを必要とし、私は事実が嫌い廃止は私の入力の前にこの警告を表示します:SOMETHINGは廃止されました。私はちょうどので、たとえば、私は私の入力とフィールド/メソッドを使用するときに警告/エラーを与えたい:C#カスタム廃止された属性

[CustomObsolete("Hello")] 
public int i = 0; 

こんにちは警告/デバッグを行います。

これは可能ですか? #warning /#エラーを使用すると、エラー/警告が常に表示されます。

+0

jonは正しいです...もしあなたがこれをチェックすることができればhttp://www.dotnetperls.com/obsoleteまたはhttp://www.codeproject.com/Articles/107103/Use - Obsolete-attributes-to-indicating-Obsolete-Metho – terrybozzio

+0

私が望む入力で警告を出すカスタム属性が必要なので、私はそれを疑問に思っていました。しかし、私はObsoleteに行くと思う。 –

答えて

6

いいえ、ObsoleteAttributeは効果的にC#コンパイラにハードコードされています。メンバーが古くなったことを示すためにC#コンパイラが理解できる独自の属性を作成する方法はありません。

私はちょうどObsoleteAttributeに行っています - それは本当にです。というエラーメッセージが "X is obsolete"で始まるのは悪いですか?

+0

私は本当に好きではありませんが、他の選択肢はないようです。 –

0

あなたはカスタムpost-build taskだろう欲しいものを達成するために

[Obsolete("Hello", false)] 
    public String foo() { 
     return "bar"; 
    } 
+0

私がそれを読んだところ、OPはObsoleteAttributeを認識していますが、エラーが報告される方法は気に入らない - あなたの場合: "fooは時代遅れです: 'Hello'" –

2

一つの方法エラー

[Obsolete("Hello", true)] 
    public String foo() { 
     return "bar"; 
    } 

では、警告を

だけ時代遅れ使用することができます。プロジェクトをコンパイルした後、作成した別のプログラムでこのアセンブリを読み込み、その属性に対して解析します。それで、あなたが杖をつけたメッセージなどを出力することができます。しかし、この属性が使用されている正確な行番号とファイルを出力するのは難しい作業です。これはpdbファイルを解析しなければならないからです(デバッグモードでのみ正しく動作します)。

.NETのObsolete属性に固執してください。 :-)

関連する問題