以调试模式发布,但编译器删除#if debug中的代码

时间:2012-10-04 22:36:04

标签: c# asp.net visual-studio-2010 compilation

我只是在调试模式下发布以在我的本地机器上进行测试,我希望'#if debug'模式可以工作,这样我就可以测试我不想要的功能。

当我在调试模式下发布时,web.config仍然有

<system.web>
    <compilation debug="true" targetFramework="4.0">
</system.web>

但是当我在项目的dll上使用反射器时,代码就像这样

#if debug
    PlaceHolder1.Visible = true;
#endif

不存在。我认为编译器已将其删除。

注意:我不是在谈论构建,我在谈论发布。执行调试构建工作正如我所期望的那样,上面的代码仍然存在

这是预期的行为吗?当我在调试模式下发布时,有没有办法让编译器包含那些代码?我是不是错了?

更新 为响应@ dash的评论,我的Package / Publish Web设置为:

Package/Publish Web settings

3 个答案:

答案 0 :(得分:4)

C#预处理程序符号区分大小写。尝试:

#if DEBUG

答案 1 :(得分:2)

是的,这是预期的行为。条件编译指令(例如#if debug)仅在编译时考虑。构建C#代码时会编译它。那你指出的compilation debug选项是什么?我不确定,但我认为它会改变aspx页面的编译方式或网站运行构建代码的方式,这种情况发生在查看页面之前,而不是代码构建时。

答案 2 :(得分:1)

在Visual Studio中:

1. Right click on your project choose properties.
2. Go to the "Build" tab
3. Select Release in the "Configuration" combobox.
4. Check the "Define DEBUG constant"-checkbox.

确保在部署到生产环境之前不要忘记将其删除。

编辑: 由于您使用的是小写调试,因此您可以在步骤4中的“条件编译符号”中输入debug(小写)而不是步骤4: Conditional compilation symbols