确定已发布DLL中的调试/发布模式?没有#DEBUG

时间:2011-04-01 12:43:57

标签: c# build-process

我有一个可以在某些项目中引用的组件(例如,Component.dll)。当然,我在发布模式下发布它。

在另一个项目中(例如Project.exe),我引用了Component.dll 如果我在调试模式下构建Project.exe,有没有办法在我的Component.dll库中找到它?

澄清更多:如果我在Test中有一个名为Component.dll的类和方法。我可以这样做:

public void Test(){
    if(Debug.IsInDebugMode)
        ...
}

请注意,Component.dll是在发布模式下构建的。

1 个答案:

答案 0 :(得分:5)

您的代码是在发布模式还是调试模式下构建并不重要。生成的IL几乎相同。 Debug版本将具有抖动用于设置编译默认值的属性,您的属性将丢失。接下来要做的就是如何调试或运行应用程序。重要的设置是工具+选项,调试,常规,“抑制模块加载时的JIT优化”。默认情况下会打勾。

现在,无论您的应用是否由调试器启动,都会产生影响。这很容易找到,使用System.Diagnostics.Debugger.IsAttached属性。如果为false,则从IL生成的机器代码将通过抖动进行优化。一个退化的情况是在代码启动后附加一个调试器。有点重要的是,这对你没有任何影响。