2012-10-04 53 views
2

里面的代码我只在调试模式下发布测试我的本地机器,我希望'#if调试'模式将工作,以便我可以测试功能,我不想在生产中。发布在调试模式,但编译器删除#if调试

当我在调试模式下发布的web.config中仍具有

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

但是当我使用反射器对项目的DLL,它是这样

#if debug 
    PlaceHolder1.Visible = true; 
#endif 

代码是不存在的。我认为编译器已经删除它。

注:我不是在谈论构建,我正在谈论发布。做一个调试版本的工作,因为我期望它与上面的代码仍然存在

这是预期的行为?当我以调试模式发布时,是否有办法让编译器包含这些代码段?我是否全部错了?

更新: 为了响应@ Dash的评论我的封装/发布站点设置为:

Package/Publish Web settings

+0

如果我使用'if#DEBUG',而不是'if#debug',那么一定要在项目属性中检查'Package/Publish Web'设置以确保'Debug'是发布时的活动构建配置。 – dash

+0

你的Build属性页面是什么样的?你有'定义DEBUG常数'打勾?如果我在Package/Publish Web页面中设置了Debug,并且在Build选项卡上勾选了该选项,然后进行发布,则适用于我,您可以使用ILSpy(http://ilspy.net/)检查以确保你期待的代码已经包含在内。 – dash

+0

@dash是定义DEBUG常量被打勾,但它不适用于我。我一直在使用http://www.reflector.net/来检查发布后的编译代码,但感谢关于ILSpy的提示,我之前没有听说过。为了防止这种情况出现 – Dean

回答

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在步骤4进入“条件编译符号”调试(小写): Conditional compilation symbols

+0

,我会给出另外一个设置。这看起来很有希望,但它已经打勾了(是的,我选择了“发布”配置)。我在更改配置时注意到“优化代码”复选框没有勾选以进行调试,但选择了发布的方式我会将其发送到 – Dean

+1

它区分大小写,因此您应该编写#if DEBUG – haiiaaa

+0

即使web.config有小写调试?他们没有关系吗? – Dean

2

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

4

C#预处理器符号是区分大小写的。尝试:

#if DEBUG 
+0

谢谢,我解决了这个问题,而且我的所有调试都是小写调试。但这并不能解决我的问题 – Dean

+0

你说得对,我的道歉和感谢!但是,我理解这里发生的事情的关键在于,web.config中定义的调试与DEBUG常量无关,并且可以在属性窗口中对其进行更改。 – Dean

相关问题