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 に指示する設定がどこかに隠されていますか?