编译类库中的#if DEBUG指令

时间:2016-10-29 14:30:01

标签: c# c-preprocessor .net-assembly visual-studio-debugging

我将在类库中使用#if DEBUG指令。已编译的ClassLibrary.dll将在单独的Application.exe中使用。

我的调试代码是否会在以下情况下执行?

  1. 库以DEBUG模式编译,应用程序在RELEASE
  2. 中编译
  3. 库在RELEASE中编译,应用程序在DEBUG中编译

2 个答案:

答案 0 :(得分:5)

编译器指令在编译时解释,而不是在运行时解释。因此,如果using应用程序是在RELEASE或DEBUG模式下编译的,则无关紧要。因此

1。)库在DEBUG模式下编译,应用程序在RELEASE =>中编译的

2.。)库在RELEASE中编译,应用程序在DEBUG中编译=>

答案 1 :(得分:0)

我有一个类似的问题,尽管我在debug preprocessor指令中配置了调试模式设置,但释放模式仍在使用调试模式设置。原来问题出在如何将类库项目的参考dll添加到我的项目中。有两种方法可以添加对项目的引用。

  

选项1::将项目的debug / release文件夹中的.dll添加到   依赖它的项目。   问题:这引入了一个问题,如果您添加了对   调试dll版本,即使您在发行版中运行该应用程序   模式,它仍将引用调试版本。
  修复::您将必须替换与要运行的模式相对应的.dll。   例如:如果您要在发布模式下运行,则将有   将依赖项dll替换为其相应的发行版本。

     

选项2::添加要引用的项目的项目引用(.csproj)文件。
  优势:这可以确保整个解决方案何时生效   内置在发布模式下,可以正确解析所有依赖项   发行模式,当您在调试中构建解决方案时,它将获得全部   调试模式下的依赖项目。这不需要你   干预。

     

option1在哪里有用?->当项目需要您的项目时   参考与您的解决方案不在同一个解决方案中。   您要使用第三方dll的情况。在这种情况下,您   没有第三方代码,但只有dll或它说谎   在另一种解决方案中。

     

option2何时有用?->两者都有用时   引用项目和被引用项目存在于同一解决方案中   (这是我的情况)。如果您还记得,我所有的项目都存在于   相同的解决方案。

     

该链接说明了如何通过两种方式添加项目引用:   https://www.c-sharpcorner.com/article/project-reference-vs-dll-reference-in-visual-studio/