【问题标题】:ASP.NET MVC {version} wildcard in script bundle selects debug version?脚本包中的 ASP.NET MVC {version} 通配符选择调试版本?
【发布时间】:2015-01-24 07:02:12
【问题描述】:

我正在尝试使用从 NuGet 导入的 knockout.js,其中包括 knockout-3.2.0.jsknockout-3.2.0.debug.js。我添加了一个新的捆绑包,例如

bundles.Add(new ScriptBundle("~/bundles/knockout").Include(
    "~/Scripts/knockout-{version}.js"));

但是当我检查网页时,发现加载的包是knockout-3.2.0.debug.js

我阅读了以下问题

  1. what is {version} in ScriptBundle("~/scripts/jquery-{version}.js")
  2. {version} wildcard in MVC4 Bundle

这似乎对回答我的问题没有特别的帮助。

【问题讨论】:

  • 其他捆绑包在工作吗?你做了 BundleTable.EnableOptimizations = true;
  • 我没有启用优化。别人没有调试版脚本。

标签: javascript asp.net-mvc asp.net-mvc-4 knockout.js


【解决方案1】:

在 Visual Studio 中,您可以有多个解决方案配置(它是 Visual Studio 主菜单下按钮 vars 中的下拉菜单,默认情况下在标准栏中)。默认情况下,当您创建新项目(或解决方案)时,您有 2 个可用配置:调试和发布。 (您也可以在 Build > Configuration Manager... 菜单中访问它)。

当您构建解决方案或项目时(或发布时),您必须选择以下配置之一:

  • 如果选择调试,项目将使用调试信息进行编译,以便您可以将其附加到 VS 调试器并将运行代码与源文件相关联。除此之外还有其他一些事情发生,例如捆绑器将使用 JS 文件的调试版本,而不是生成缩小的捆绑包。这背后的想法是,如果你使用这个配置,那是因为你想调试你的代码。

  • 如果选择 Release,则编译项目时不包含调试信息。并且包使用脚本的正常或缩小版本,并且每个完整包都转换为单个缩小文件

因此,您需要做的是选择正确的配置。考虑到这会影响 js 捆绑和程序集的创建。有时程序集中的代码甚至可以有更好的性能,因为发布版本会进行一些优化,这些优化在程序集的调试版本中没有应用,以允许调试它们。

【讨论】:

    【解决方案2】:

    这是因为您在脚本文件夹中存在 JS 的调试版本。

    如果您查看其他 js,则没有调试文件,因此它将使用 jquery.1.7.0.js,但如果您复制粘贴 jquery.1.7.0.debug.js,那么它将选择它。

    如果要使用 knockout-3.2.0.js,请删除 js 的调试版本。

    你也可以去web.config

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

    如果设置 debug=true 则选择调试版本,如果 debug 为 false 则选择其他版本的 js。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2010-09-25
      • 1970-01-01
      • 2010-10-27
      • 2021-11-24
      • 2013-04-23
      相关资源
      最近更新 更多