有没有人知道为什么在动态加载(使用 Assembly.CreateInstance)程序集中调用 Trace 调用时不会产生输出?奇怪的是,Debug.WriteLine 在程序集内工作得很好,并且来自正在执行动态加载的程序集内的 Trace 调用也工作得很好。我已经确认 Trace.Listeners 包含正确的侦听器对象(与 Debug.Listeners 相同),但对 Trace 的调用不会产生任何输出。
这对我来说是一个巨大的诊断问题,因为我的整个应用程序都是通过自定义 TraceListener 进行记录的。
更新:(来自下面的评论)我正在使用 CSharpCodeProvider 动态构建程序集,但我没有/d:TRACE
在 CompilerParameters.CompilerOptions 中提供开关。因此 TRACE 没有在程序集中定义,我对 Trace 的调用基本上被忽略了。还值得注意的是,我正在设置CompilerParameters.IncludeDebugInformation = true
这可以解释为什么我得到 Debug 即使我没有明确设置/d:DEBUG
. CompilerParameters.CompilerOptions
这只是一个猜测 - MSDN 文档中没有任何内容表明这是真的。
这里的底线是,当使用CSharpCodeProvider
动态编译源代码时,任何特定于程序集的东西都由您明确定义。