Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发布时定义的调试_C#_Asp.net Mvc_Visual Studio 2010_Publish - Fatal编程技术网

C# 发布时定义的调试

C# 发布时定义的调试,c#,asp.net-mvc,visual-studio-2010,publish,C#,Asp.net Mvc,Visual Studio 2010,Publish,我有一个奇怪的问题 #if (!DEBUG) checkLicense(); #endif 这在Release和Debug配置中都能正常工作。但当我尝试使用发布配置发布时,此条件不会执行。看起来发布正在使用调试dll 我错过了什么?首先,你必须确保进入这个“如果”,并使用try\catch #if (!DEBUG) MessageBox.Show("I'm in"); try{ checkLicense();} catch{MessageBox.Show("ERROR IN c

我有一个奇怪的问题

#if (!DEBUG)
    checkLicense();
#endif
这在
Release
Debug
配置中都能正常工作。但当我尝试使用发布配置发布时,此条件不会执行。看起来发布正在使用调试dll


我错过了什么?

首先,你必须确保进入这个“如果”,并使用try\catch

#if (!DEBUG)
MessageBox.Show("I'm in");
try{
    checkLicense();}
catch{MessageBox.Show("ERROR IN checkLicense");}
#endif
然后拿出一个版本并运行它。如果你在“如果”,你会知道它,如果你有一个例外,你也会知道它

你也可以试试

#if DEBUG
....
#else
.....

有一个设置可以控制是否基于不同的部署模式为每个项目定义调试常量。通过确保选中了
Define DEBUG constant
复选框来验证是否为“release mode”定义了常量

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

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


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


如果可能的话,检查一下。尽管我认为我给你的第一个选项更可能是我的另一个答案,因为我刚刚注意到mvc标签,而之前我假设你使用的是WebForms

您提供的代码片段是否在视图中

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


我确信这就是我将其发布在SOI上的原因。如果在发布模式的项目设置中未选中
定义调试常量
选项,那么我认为整个语句将在编译时删除,并且不会发生任何事情-即使使用else子句。感谢您的回复。“发布”复选框中的“是”未选中。所以即使使用not运算符,我的代码也会被删除?(!DEBUG)。我相信是这样,尝试选中复选框,保存项目配置,然后再次部署应用程序。不,这是错误的。若我在发布模式下设置Define DEBUG常量,那个么在发布模式下我的条件等于true(为什么在调试时执行NOT条件,而在发布模式下执行true条件?
<deployment retail="true" />