1

Visual Studio 2013 でビルドされたアプリケーションでは、TRACE 定数のチェックを外しています。

ここに画像の説明を入力

私の理解では、これは、System.Diagnostics.TraceSource オブジェクトによって行われた呼び出しは、 MSDNごとにコンパイルされたコードに含まれないことを意味するはずです。

たとえば、Trace 定数が未定義でプロジェクトがビルドされている場合、以下の TraceInformation() の呼び出しはコンパイルされたコードに表示されません。

TraceSource ts = new TraceSource("MyTraceSource");
ts.TraceInformation("This will not be included in compiled code.");

私はこれを何年もやっていますが、問題はありません。今日、ハイブリッド Asp.Net webforms/mvc アプリケーションで、次のように、プロパティのゲッターとセッター、および関数で、public static クラスにトレースを追加しました。

public static class MyClass
{
    private static TraceSource ts = new TraceSource("MySource");

    private static string _s;
    public static string MyString
    {
        get
          {
            ts.TraceInformation("I don't expect to see this in compiled code.")
            return _s;
          }

    }

...コンパイルされたコードでトレース呼び出しを発見してショックを受けました。Visual Studio がこれらのトレース呼び出しをコンパイル済みコードに含めるのはなぜですか?

奇妙なことに、問題はこの 1 つのクラスだけで発生しています。アプリケーションには何百ものトレース呼び出し (分離コード ページ、参照プロジェクトなど) がありますが、この 1 つのクラスだけでトレース呼び出しがコンパイルされたコードになります。

これは public static クラスであること、または静的プロパティの getter と setter を持っていることと関係があると最初は思っていましたが、テスト プロジェクトをビルドすると、そうではないことがすぐにわかりました。

ソリューションで「#TRACE」というフレーズを探しましたが、どこにも定義されていませんでした。

コード モジュールの先頭にこれらの魔法の言葉を含めたとしても、次のようになります。

#undef TRACE

Visual Studio では、コンパイルされたコードにトレース呼び出しが引き続き含まれています。

これは古くて広大なアプリケーションです。コンパイルされたコードにトレース呼び出しを含めるように Visual Studio 2013 に指示する設定がどこかに隠されていますか?

4

0 に答える 0