6

コードをDEBUGコードとしてマークすると、RELEASEモードでは実行されないことはわかっていますが、それでもアセンブリにコンパイルされますか?アセンブリが余分な方法で肥大化しないようにしたいだけです。

[Conditional(DEBUG)]
private void DoSomeLocalDebugging()
{
   //debugging
}
4

1 に答える 1

11

はい、コンパイルしてもメソッド自体はビルドされます。

これは完全に論理的です。ポイントは、呼び出し先がビルドされたときではなく、呼び出し元Conditionalがビルドされたときに定義されたプリプロセッサシンボルに依存するためです。

簡単なテスト-これを構築します:

using System;
using System.Diagnostics;

class Test
{
    [Conditional("FOO")]
    static void CallMe()
    {
        Console.WriteLine("Called");
    }

    static void Main()
    {
        CallMe();
    }
}

(FOOを定義せずに)コードを実行すると、出力がないことがわかりますが、Reflectorを見ると、メソッドがまだそこにあることがわかります。

別の言い方をすれば、.NETでリリースされたアセンブリ(コンパイル対象のアセンブリ)は、DEBUGシンボルが定義された状態でビルドされていると思いますか?もしそうでないなら(そして私は彼らがそうではないと強く思う!)、どうやって電話をかけることができるだろうDebug.Assertか?

確かに、プライベートメソッドを構築する場合は、それを含めないのが理にかなっています、ご覧のとおり、それでも構築されています。これは、単純さと一貫性のために合理的です。

于 2010-08-13T13:47:12.583 に答える