5

[ビルド]メニューの[構成マネージャー]を参照して、

ソリューションがデバッグモードのときにコメントアウトされたコードがコンパイルされないようにC#コードにコメントを付ける方法はありますが、リリースモードに変更するとコンパイルされますか?

なぜこれが欲しいのですか?リリースモードでコンパイルされ、デバッグではコンパイルされないコードが必要な理由は、開発用PCでは機能しないコード(ホストから電子メールを送信するコードなど)があるためです。

公開する前にコードをさかのぼってコメントを外すのではなく、自動的に実行したいと思います。

4

4 に答える 4

10

あなたはこのようなものを探しているかもしれません:

#if DEBUG
     Console.WriteLine("Debug Mode");
#else
     Console.WriteLine("Release Mode");
#endif

リリースモードのみを気にする場合は、次を使用できます。

#if !DEBUG
     Console.WriteLine("Release Mode");
#endif
于 2009-07-11T13:01:03.147 に答える
10

この目的のために、メソッドのConditional属性を使用できます(ただし、コードの個々の行は使用できません)。

たとえば、以下はDEBUGビルドにのみコンパイルされます。

[Conditional("DEBUG")]
public void MyMethod()
{
    // Do Stuff
}

DEBUGシンボルは、プロジェクト設定ですでに指定されています。これを行うには、リリースビルド用に「RELEASE」などの独自のシンボルを作成する必要があります。

[Conditional("RELEASE")]
public void MyMethod()
{
    // Do Stuff
}

ただし、この解決策はあまりお勧めしませんので、一歩下がって問題をより高いレベルから新たに検討することをお勧めします。

于 2009-07-11T13:03:54.927 に答える
4

オブジェクト指向の手法であなたの問題を解決しようと思います。依存性注入を使用して、必要なデバッグアクションを実行するクラスを構築します。

何かのようなもの:

public class MyClass {

    public MyClass(IDoOtherStuff stuffToDo) {
        DoOtherStuff = stuffToDo;
    }

    private IDoOtherStuff DoOtherStuff { get; set; }

    public void Do() {
        DoOtherStuff.BeforeDo();

        // Blah blah blah..

        DoOtherStuff.AfterDo();
    }
}

public interface IDoOtherStuff {
    void BeforeDo();
    void AfterDo();
}

public class DebugOtherStuff : IDoOtherStuff {
    public void BeforeDo() {
        Debug.WriteLine("At the beginning of Do");
    }

    public void AfterDo() {
        Debug.WriteLine("At the end of Do");
    }
}

public class ReleaseOtherStuff : IDoOtherStuff {
    public void BeforeDo() { }
    public void AfterDo() { }
}

これで、 WindsorUnityNinjectSpring.NETなどの制御の反転を使用して、開発環境とリリース環境を構成できます。

于 2009-07-11T13:24:21.747 に答える
-3

私は間違っているかもしれませんが、コメントはコンパイラによって無視されると思います。.NET Reflectorを使用して私のアセンブリを見ると、存在することがわかっているコメントはありません。

BlueMonkMNのメソッドは、コンパイルモードに応じて異なるコードを実行するように機能します。

使用しているコンパイルモード(およびその他の変数)に応じて異なるコードを実行する場合は、PostSharpを確認してください。これは、アセンブリのコードを追加および削除できるコンパイル後のコンパイラです。

使用例:-プロジェクトの詳細なデバッグおよびトレース情報が必要です。-この余分なデバッグコードが作業を行う関数を覆い隠すため、すべてのメソッド結果またはメソッド呼び出しの後にorステートメントを含めるのは嫌いです。printtrace.write

この追加のデバッグ情報を動的に作成するようにPostSharpを構成できます。いくつかの構成を微調整すると、すべての関数へのすべての呼び出しと、各呼び出しの結果(変数の内容を含む)を出力できます。これにより、プログラムのロジックフローを非常に簡単にたどることができます。

于 2009-07-11T13:24:16.677 に答える