4

動的にロードされた (Assembly.CreateInstance を使用して) アセンブリ内で呼び出されたときに Trace 呼び出しが出力を生成しない理由について、誰かが洞察を持っていますか? 奇妙なことに、Debug.WriteLine はアセンブリ内で正常に動作し、動的読み込みを実行しているアセンブリ内からの Trace 呼び出しも正常に動作します。Trace.Listeners に正しいリスナー オブジェクト (Debug.Listeners と同じ) が含まれていることを確認しましたが、Trace を呼び出しても出力が生成されません。

私のアプリケーション全体がカスタム TraceListener を介してログを記録しているため、これは私にとって大きな診断上の問題です。

更新: (以下のコメントから) CSharpCodeProvider を使用してアセンブリを動的に構築していますが/d:TRACE、CompilerParameters.CompilerOptions でスイッチを指定していませんでした。その結果、TRACE はアセンブリで定義されておらず、Trace への呼び出しは本質的に無視されていました。で明示的に設定しCompilerParameters.IncludeDebugInformation = trueていないのに、デバッグを取得していた理由を説明できるように設定していることにも注意してください。これは単なる推測です。MSDN のドキュメントには、これが真実であると述べられているものは何もありません。/d:DEBUGCompilerParameters.CompilerOptions

ここでの結論は、CSharpCodeProviderソースを動的にコンパイルするために使用する場合、アセンブリ固有のものは明示的に定義する必要があるということです。

4

1 に答える 1

5

DEBUG と TRACE は、対応するメソッドを制御する 2 つの異なる無関係な定義です。TRACE でコンパイルされたアセンブリが定義されておらず、結果として Trace メソッドが何も実行していない可能性があります。

于 2013-01-03T01:29:29.120 に答える