在动态加载(使用Assembly.CreateInstance)程序集内部调用时,有没有人有任何关于为什么Trace调用不生成输出的见解?奇怪的是,Debug.WriteLine在程序集内工作正常,并且正在进行动态加载的程序集内的Trace调用也可以正常工作。我已经确认Trace.Listeners包含正确的侦听器对象(与Debug.Listeners相同),但是对Trace的调用只是不生成任何输出。
这对我来说是一个巨大的诊断问题,因为我的整个应用程序都是通过自定义TraceListener进行记录。
更新:(来自下面的评论)我正在使用CSharpCodeProvider动态构建程序集,但我没有在CompilerParameters.CompilerOptions中提供/d:TRACE
开关。因此,TRACE没有在程序集中定义,我对Trace的调用基本上被忽略了。同样值得注意的是,我正在设置CompilerParameters.IncludeDebugInformation = true
这可以解释为什么我收到调试,即使我没有在/d:DEBUG
中明确设置CompilerParameters.CompilerOptions
。这只是猜测 - 在MSDN文档中没有任何内容表明这是真的。
这里的底线是,当使用CSharpCodeProvider
动态编译源代码时,任何特定于程序集的内容都取决于您明确定义。
答案 0 :(得分:5)
DEBUG和TRACE是控制相应方法的两个不同的无关定义。有可能用TRACE编译的汇编没有定义,结果Trace方法没有做任何事情。