发布时未编译调试模式的代码

Posted

技术标签:

【中文标题】发布时未编译调试模式的代码【英文标题】:Code for debug mode is not compiled when publishing 【发布时间】:2015-11-12 12:03:46 【问题描述】:

有些地方我使用#if DEBUG 编译器指令来选择要编译的代码。直到不久前,我还能够以调试或发布模式发布我的 ASP.NET MVC 应用程序。事实上,我仍然可以这样做。但是现在,出于某种原因,无论我选择哪种模式,我都只会在输出中得到 Release 代码。如果我使用 .NET Reflector 查看生成的 dll 内部,我可以看到 #if DEBUG 之后的代码不存在。 我在项目属性中检查了Define DEBUG constant 的调试模式。我可以让它工作的唯一方法是明确定义 DEBUG 常量。除了发布时,还有其他地方可以配置发布设置吗?

【问题讨论】:

在项目属性中,在 Build 选项卡下,是否为调试配置选中了“Define DEBUG constant”? @DavidG,是的,当然。我已经在我的问题中说明了这一点。 【参考方案1】:

经过大量挖掘(并且在发布此问题之后),我在 ProjectName|Properties|PublishProfiles 下找到了一个名为 MyProjectName.pubxml 的文件:

在那里我找到了这一行:

   <DebugSymbols>False</DebugSymbols>

将其设置为 True 后,它终于得到解决并按预期工作。我还注意到LastUsedBuildConfiguration 的值是 Release,尽管它实际上是 Debug。所以很明显这个文件在某些​​时候无法保持最新​​。希望这可以帮助那些候选人及时浪费时间。

编辑

我又遇到了同样的问题,但这次我需要相反的发布模式。这次更改上述文件并没有解决问题。所以我决定做我认为最好的事情:只需删除 PublishProfiles 文件夹,这样当您下次尝试发布应用程序时,系统会提示您创建新的发布配置文件。这样就解决了问题。

EDIT2

伙计,我没有意识到可以选择配置。出来我们需要选择我们需要发布到哪个配置,无论在 Visual Studio 本身中选择什么配置。

【讨论】:

这是一个不错的选择。一直让我发疯。谢谢。

以上是关于发布时未编译调试模式的代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake 时未创建调试符号

软件调试和应用软件开发模式

iPhone 上的调试与发布模式

C编译器中是不是有调试模式编译标志的标准?

在发布中抛出断言但不是调试 - 一定是编译器错误?

XAML 是不是有用于调试模式的条件编译器指令?