【问题标题】:How to set debug false for release mode如何为发布模式设置调试错误
【发布时间】:2014-03-31 22:19:04
【问题描述】:

我有这个 web.config 文件,其编译选项设置如下

Web.config

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

这是 Visual Studio 默认为发布模式设置的内容。

Web.Release.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
 <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
 </system.web>
</configuration>

我将它用于 MVC4 项目。基于this tutorial,当应用程序在Release Mode 下运行时,我预计将提供 js 和 css 的缩小版本。但这似乎不起作用,并且正在提供 js 和 css 的非缩小版本。另一方面,如果我在 web.config 中将 debug 显式设置为 false,则最小版本将正确提供。

当应用程序在 Release Mode 下运行时,似乎是 compilation 标签转换问题,但我不明白 Web.Release.config 中有什么问题.

简而言之,我无法通过在发布模式下运行应用程序来进行捆绑和缩小工作。

【问题讨论】:

  • 我敢打赌这是因为您的应用程序在 IIS 中父应用程序的虚拟目录下运行,并在不存在时继承其配置,因此为什么它在存在时修复它,覆盖父配置!

标签: asp.net asp.net-mvc asp.net-mvc-4 bundling-and-minification web.config-transform


【解决方案1】:

在 Web.Release.config 中定义的 Web.config 转换仅在为相关配置部署/发布项目时完成。

仅将 Visual Studio 中的活动配置更改为发布并运行应用程序不会运行转换。因此,web.config 保持不变。顺便说一下,这种行为是合理的,因为 Web 应用程序是从包含原始 web.config 的项目目录中运行的。如果 Visual Studio 要转换 web.consign,您的原始 web.config 将被更改。

如果您尚未创建部署配置文件,您可以将应用程序发布到文件系统以验证行为。选择发布作为运行部署的配置。应按预期执行转换。

【讨论】:

  • 我已经摸不着头脑了。顺便说一句,Visual Studio localhost 从哪里临时运行该站点。我的意思是从哪个目录。比如说,当我使用 Visual Studio 调试网站时,我想检查 web.config 中的内容。
  • @Nirvan:AFAIK 从 VS 运行应用程序时,使用开发文件夹。这就是为什么 VS 不能转换 web.config 的原因,因为它会改变转换的起点。
  • @Nirvan:还有一件事:如果您在 Web.Debug.config 文件中还有用于调试的转换,那么这些也只会在部署时应用。这可能会导致不同的 debug-web.configs。
  • 还可以从 AppHarbor 中查看此工具:webconfigtransformationtester.apphb.com
  • @nmit026 感谢您的提示。看起来不错,在创建转换时肯定会有所帮助
【解决方案2】:

我的回答可能会迟到,但这对我有用:

我换行了:

<compilation xdt:Transform="RemoveAttributes(debug)" />

到:

<compilation xdt:Transform="Replace" debug="false" targetFramework="4.5" />

这基本上成功了,因为我认为优化器正在寻找 Debug 值是否存在并且 == "false"。

希望这对不想通过代码管理的人有所帮助。

【讨论】:

  • 请注意,替换将删除整个元素。当我使用它时,我包含的程序集列表被删除,我开始收到以下错误。 “System.Object”类型是在未引用的程序集中定义的。您必须添加对程序集 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'的引用
【解决方案3】:

如果您想测试您在 Global.asax 文件中设置的 .NET 捆绑和缩小,您还可以使用预编译符号...例如

#if DEBUG
  BundleTable.EnableOptimizations = false;
#else
  BundleTable.EnableOptimizations = true;
#endif

这样,您的应用程序将无需在构建操作中触发转换,而是按照您希望的方式运行。

【讨论】:

    【解决方案4】:

    可能对 Omar.Alani 的回答有所改进:

    在 Release 变换中,替换行:

    <compilation xdt:Transform="RemoveAttributes(debug)" />
    

    以下内容:

    <compilation debug="false" xdt:Transform="SetAttributes" />
    

    【讨论】:

      【解决方案5】:
      compilation debug="false" xdt:Transform="SetAttributes"
      

      当您在发布 azure 部署时激活 XML 转换以进行特定于目标环境的配置转换时会派上用场。

      当您在 azure 部署时检查 XML 转换时,会执行以下顺序:

      • 在 web.config 上应用 web.release.config
      • 在修改后的 web.config 上应用 web.stageName.config。

      但是web.release.config已经被应用到web.base.config所以如果

      compilation xdt:Transform="RemoveAttributes(debug)" 
      

      web.release.config文件中使用,web.config已经在编译时删除了debug属性,当它部署它时再次使用web.release.config进行转换,尝试应用上述命令但失败。

      【讨论】:

        【解决方案6】:

        删除调试属性就足够了 RemoveAttributes(debug)。 它的工作方式类似于 debug=false。

        【讨论】:

          猜你喜欢
          • 2012-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-02
          • 2015-01-19
          相关资源
          最近更新 更多