gpt4 book ai didi

c# - Trace.WriteLine 在使用 CSharpCodeProvider 编译的动态加载程序集中不起作用

转载 作者:太空狗 更新时间:2023-10-30 01:06:51 28 4
gpt4 key购买 nike

有人知道为什么在动态加载(使用 Assembly.CreateInstance)程序集内部调用 Trace 调用时不产生输出吗?奇怪的是,Debug.WriteLine 在程序集内部工作得很好,而来自执行动态加载的程序集内部的 Trace 调用也工作正常。我已经确认 Trace.Listeners 包含正确的监听器对象(与 Debug.Listeners 相同)但是对 Trace 的调用不会产生任何输出。

这对我来说是一个巨大的诊断问题,因为我的整个应用程序都是通过自定义 TraceListener 进行记录的。

更新:(来自下面的评论)我正在使用 CSharpCodeProvider 动态构建程序集,但我没有提供 /d:TRACE在 CompilerParameters.CompilerOptions 中切换。因此 TRACE 没有在程序集中定义,我对 Trace 的调用基本上被忽略了。还值得注意的是,我正在设置 CompilerParameters.IncludeDebugInformation = true这可以解释为什么即使我没有明确设置 /d:DEBUG 也会得到 Debug在CompilerParameters.CompilerOptions .这只是一个猜测 - MSDN 文档中没有任何内容表明这是真的。

这里的底线是当使用 CSharpCodeProvider 时动态编译源代码任何特定于程序集的内容都由您明确定义。

最佳答案

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

关于c# - Trace.WriteLine 在使用 CSharpCodeProvider 编译的动态加载程序集中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131639/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com