【问题标题】:Publish in debug mode but compiler removes code inside #if debug以调试模式发布,但编译器删除 #if debug 中的代码
【发布时间】:2012-10-04 22:36:04
【问题描述】:

我只是在调试模式下发布以在我的本地计算机上进行测试,我希望“#if debug”模式能够工作,以便我可以测试我在生产中还不需要的功能。

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

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

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

#if debug
    PlaceHolder1.Visible = true;
#endif

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

注意:我不是在谈论构建,而是在谈论发布。在上面的代码仍然存在的情况下,按照我的预期进行调试构建工作

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

更新: 作为对@dash 评论的回应,我的打包/发布 Web 设置是:

【问题讨论】:

  • 如果我使用if #DEBUG,而不是if #debug,这对我有效。此外,请务必检查项目属性中的Package/Publish Web 设置,以确保Debug 是发布时的活动构建配置。
  • 您的 Build 属性页是什么样的?你有Define DEBUG constant 打勾吗?如果我在“打包/发布”网页中设置了“调试”并且在“构建”选项卡上勾选了该选项,然后执行“发布”,这对我有用 - 您可以使用 ILSpy (ilspy.net) 检查以确保您期望的代码有被包括在内。
  • @dash yes 定义 DEBUG 常量已打勾,但它对我不起作用。我一直在使用reflector.net 在发布后检查编译的代码,但感谢有关 ILSpy 的提示,我以前没有听说过。以防万一,我会再试一次你描述的设置

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


【解决方案1】:

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

#if DEBUG

【讨论】:

  • 谢谢,我解决了,我的都是小写调试。但这并不能解决我的问题
  • 你是对的,我很抱歉,谢谢!但是,我理解这里发生的事情的关键是 web.config 中定义的调试与 DEBUG 常量无关,并且可以在属性窗口中更改。
【解决方案2】:

在 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 步:

【讨论】:

  • 这看起来很有希望,但它已经打勾(是的,我为配置选择了“发布”)。我在更改配置时确实注意到“优化代码”复选框未勾选调试但勾选发布我会试一试
  • 区分大小写,所以你应该写#if DEBUG
  • 即使 web.config 有小写调试?他们不相关吗?
  • 我更新了我的帖子,可以在“条件编译符号”中输入debug(小写)而不是勾选“定义DEBUG常量”
  • 灯泡时刻就在眼前!感谢@haiiaaa 和所有做出贡献的人。您是否介意在您的解决方案中添加“定义调试常量”意味着它以大写字母定义调试并且区分大小写,如果您想使用小写调试,您需要将它添加到您所说的“条件编译符号”中。还要让记录显示web.config中的调试与DEBUG常量无关
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多