5

我有一个奇怪的问题

#if (!DEBUG)
    checkLicense();
#endif

Release这在和Debug配置中都可以正常工作。但是当我尝试使用发布配置发布时,这个条件不会执行。看起来发布正在使用调试 dll。

我错过了什么?

4

3 回答 3

3

有一个设置来控制是否根据不同的部署模式为每个项目定义DEBUG常量。请参阅此答案以通过确保选中复选框来验证是否为“释放模式”定义Define DEBUG constant常量。

如果未选中该框,则在编译站点之前,预处理器会删除您的调试代码,并且不会执行任何代码,即使您按照其他答案的建议包含 ELSE 也是如此。

如果这不起作用,那么另一种可能性是您运行发布代码的机器可能具有machine.config部署元素

<deployment retail="true" />

此元素覆盖web.config您的应用程序的设置,并将机器上所有 .NET 应用程序的调试标志设置为 false。

所以如果可能的话,检查一下。虽然我认为我给你的第一个选项更有可能。

于 2013-03-05T15:06:00.127 回答
0

首先你必须确保你进入这个“if”并使用try\catch。

#if (!DEBUG)
MessageBox.Show("I'm in");
try{
    checkLicense();}
catch{MessageBox.Show("ERROR IN checkLicense");}
#endif

然后取出一个版本并运行它。如果你在“如果”中,你就会知道,如果你有例外,你也会知道。

你也可以试试

#if DEBUG
....
#else
.....
于 2013-03-05T14:33:59.893 回答
0

替代我的其他答案,因为我刚刚注意到 mvc 标签,而在我假设您使用的是 WebForms 之前。

您是否偶然在视图中提供了代码片段?

因为如果是这种情况,那么在运行时生成视图时,项目的 DEBUG 设置将不会受到尊重 - 它只会尊重 web.config 文件中的调试标志。

有关更多信息,请参阅此答案。

于 2013-03-05T16:03:57.243 回答