Debug.Assert在发布模式下出现

19
我们都知道在发布模式下编译时,Debug.Assert语句不会被编译进dll文件中。但是我写的一个组件在发布版本中出现了Debug.Assert语句,我怀疑可能是我的csproject设置搞错了。
你有什么想法,为什么在发布模式下Debug.Assert语句还会出现?
附注2:在检查了多次我的csproject后,我发现在Release配置中,未勾选Define DEBUG constant,说明我的设置是正确的。
6个回答

30

检查您的项目文件中的DefineConstants属性,它应该是:

  • <DefineConstants>DEBUG;TRACE</DefineConstants>对于Debug配置
  • <DefineConstants>TRACE</DefineConstants>对于Release配置

确保您的代码中没有任何#define DEBUG


我仔细检查了一遍,在“release”配置中没有DEBUG常量。 - Graviton

18

我找到了答案; 这是因为在项目内一个cs文件的开头定义了一个#define DEBUG预处理器。移除它可以解决这个问题。


12

请记住,“发布模式”只是一个名为“发布”的构建配置。这并不一定意味着正在使用编译设置的任何事情:完全可以创建一个名为“发布”的配置,实际上使用调试设置来编译所有内容,或者根本不编译任何内容!

其他答案提供了一些要查找的地方,但基本上听起来您的项目或解决方案设置已重新配置“发布”版本以包括调试信息。

还有一种可能性尚未提到:在VS中,如果您下拉生成配置组合框(通常会选择“调试”或“发布”),然后选择“配置管理器”,您可以看到每个解决方案生成配置对于每个项目意味着什么。 请注意,您可以例如在解决方案上配置“发布”版本,仍然在某些组件中使用调试模式进行构建。


4

你有检查项目文件吗? 定义常量不应包含DEBUG。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

1
你是否使用任何构建过程,例如Nant或MSBuild,甚至是Web部署项目?
此外,请确保在发布模式下,进入项目属性并检查“定义DEBUG常量”未被选中。

1
作为对madgnome和rdkleine所说的进一步补充,您还可以检查当设置为在发布模式下构建时,您的项目是否也设置为在发布模式下构建。可能会出现在项目级别设置为发布时,项目仍以调试模式构建的情况。
为此,请在VS解决方案资源管理器中右键单击解决方案并选择配置管理器。检查对于发布的“活动解决方案配置”,您的项目是否为其配置中的发布而不是调试。
如果这仍然没有帮助,那么您可以添加一个被"#if DEBUG"包围的代码片段,看看是否编译了它?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接