4

有没有人知道为什么在动态加载(使用 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动态编译源代码时,任何特定于程序集的东西都由您明确定义。

4

1 回答 1

5

DEBUG 和 TRACE 是 2 个不同的不相关的定义控制相应的方法。使用 TRACE 编译的程序集有可能未定义,因此 Trace 方法没有做任何事情。

于 2013-01-03T01:29:29.120 回答