動的にロードされた (Assembly.CreateInstance を使用して) アセンブリ内で呼び出されたときに Trace 呼び出しが出力を生成しない理由について、誰かが洞察を持っていますか? 奇妙なことに、Debug.WriteLine はアセンブリ内で正常に動作し、動的読み込みを実行しているアセンブリ内からの Trace 呼び出しも正常に動作します。Trace.Listeners に正しいリスナー オブジェクト (Debug.Listeners と同じ) が含まれていることを確認しましたが、Trace を呼び出しても出力が生成されません。
私のアプリケーション全体がカスタム TraceListener を介してログを記録しているため、これは私にとって大きな診断上の問題です。
更新: (以下のコメントから) CSharpCodeProvider を使用してアセンブリを動的に構築していますが/d:TRACE
、CompilerParameters.CompilerOptions でスイッチを指定していませんでした。その結果、TRACE はアセンブリで定義されておらず、Trace への呼び出しは本質的に無視されていました。で明示的に設定しCompilerParameters.IncludeDebugInformation = true
ていないのに、デバッグを取得していた理由を説明できるように設定していることにも注意してください。これは単なる推測です。MSDN のドキュメントには、これが真実であると述べられているものは何もありません。/d:DEBUG
CompilerParameters.CompilerOptions
ここでの結論は、CSharpCodeProvider
ソースを動的にコンパイルするために使用する場合、アセンブリ固有のものは明示的に定義する必要があるということです。