2

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

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

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

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

#if debug
    PlaceHolder1.Visible = true;
#endif

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

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

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

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

打包/发布 Web 设置

4

3 回答 3

5

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

#if DEBUG
于 2012-10-04T22:49:55.527 回答
2

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

于 2012-10-04T22:41:03.430 回答
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 步: 条件编译符号

于 2012-10-04T22:47:38.903 回答