“那里是否存在的事实会否导致从
<compilation>
中移除它的目的失败?”
从
MSDN C#编译器选项中,
要打开编译器上的
debug标志,需要使用
/debug
而不是
/define:Debug=True
。
/debug : 指示编译器生成调试信息。
/define : 定义预处理器符号。
因此,当您定义
Debug=True
时,只有该代码情况被激活:
// Compile what is inside here !
/define:Debug=True
不会添加任何额外的调试信息,除非你手动使用上述代码包含它们。
测试页面
我使用以下代码进行测试并查看发生了什么。
txtDebug.Text = HttpContext.Current.IsDebuggingEnabled.ToString();
#if DEBUG
txtDebug.Text += "<br>defined Debug is on";
#endif
#if DEBUG == true
txtDebug.Text += "<br>defined Debug = true is on";
#endif
结果1
如果debug="false"
且使用compilerOptions="/define:Debug=True"
,结果为
false
定义的Debug=true已启用
结果2
如果debug="true"
且使用compilerOptions="/define:Debug=True"
,结果为
true
定义的Debug已启用
定义的Debug=true已启用
结果3
现在我进行了一次测试,我在web.config文件中添加了这行内容
<compiler language="c#;cs;csharp" extension=".cs"
compilerOptions="/define:Debug=True /D:DEBUG,TESTFLAG"
type="Microsoft.CSharp.CSharpCodeProvider, System,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
warningLevel="4" />
结果是 debug=false
False(debug为false)
定义的Debug为on(但定义的DEBUG现在运行)
定义的Debug = true为on(这也在运行)
测试标志(但定义的额外标志也在运行)
MSDN
查看/define(预处理器定义)的MSDN页面,我发现声明:
/define:Debug=True
这个工作只适用于这种代码情况。
#if DEBUG == true
txtDebug.Text += "<br>defined Debug = true is on";
#endif
#if DEBUG
的用法。除非我更改工具栏上的配置下拉菜单(您可以看到Debug,Release等),然后重新构建,否则我无法使其返回false。另外,#if DEBUG
和#if DEBUG == true
之间有什么区别?最后,您的最终答案是什么?David Ebbo的答案表明,具有/define:Debug=True
与debug="true"
是相同的。您的答案是否与他的答案一致或相矛盾? - oscilatingcretindebug="true"
并不等同于/define:debug=true
,因为前者具有更高的优先级,而后者在这里无法工作。我已经制作了一个测试页面,并在此展示了结果,证明了这一点。现在我还回答了#if DEBUG
和#if DEBUG == true
之间的区别,如果您看到测试结果,就会理解它们。我不能再在这里写一遍了。 - Aristos