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