ScriptBundle在调试模式下添加完整文件和缩小文件

pwd*_*dst 3 asp.net asp.net-mvc-4 bundling-and-minification

我在BundleConfig.cs中定义了以下ScriptBundle-

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
          bundles.Add(new ScriptBundle("~/js/yepnope").Include(
                "~/Scripts/yepnope.{version}.js"));
       }
    }
Run Code Online (Sandbox Code Playgroud)

它实际上并不是唯一的捆绑包,但这就是与问题相关的所有内容 - 其余的只是其他捆绑定义.

当处于web.config中设置的"调试"模式时

<compilation debug="true" targetFramework="4.5">
Run Code Online (Sandbox Code Playgroud)

脚本的完整版本和缩小版本都会发送到浏览器 -

<script src="/Scripts/yepnope.1.5.4-min.js"></script>
<script src="/Scripts/yepnope.1.5.4.js"></script>
Run Code Online (Sandbox Code Playgroud)

使用HTML帮助程序添加脚本,如此 -

@section HeadScripts
{
    @Scripts.Render("~/js/yepnope")
}
Run Code Online (Sandbox Code Playgroud)

这是在Windows 7 Professional 64位上的Visual Studio 2012中运行的MVC4项目.

无论我做什么,我都无法使{version}通配符按照Microsoft文档中的描述行事-

注意:除非EnableOptimizations为true或Web.config文件中的编译元素中的debug属性设置为false,否则不会捆绑或缩小文件.此外,将不使用.min版本的文件, 将选择完整的调试版本.

对于ASP.NET MVC 4,这意味着使用调试配置,文件jquery-1.7.1.js将添加到包中.在发布配置中,将添加jquery-1.7.1.min.js.捆绑框架遵循几个常见的约定,例如:

  • 当存在"FileX.min.js"和"FileX.js"时,选择".min"文件进行发布.
  • 选择非".min"版本进行调试.
  • 忽略仅由IntelliSense使用的"-vsdoc"文件(例如jquery-1.7.1-vsdoc.js).

上面显示的{version}通配符匹配用于在Scripts文件夹中使用适当版本的jQuery自动创建jQuery包.在此示例中,使用通配符可提供以下好处:

  • 允许您使用NuGet更新到更新的jQuery版本,而无需在视图页面中更改前面的捆绑代码或jQuery引用.
  • 自动选择调试配置的完整版本和发布版本的".min"版本.

如果我添加"EnableOptimizations",它似乎表现得如预期的那样.

有没有人注意到这个或找到了解决方案?

Tim*_*lds 5

MVC4只知道如何处理.min.js文件.它无法识别-min.js(带破折号).

我通常做的方式,具有不易成功,是摆脱任何.min.js-min.js通过同时提供一个库提供的文件.js以及一个.min.js-min.js.默认情况下,MVC会自动运行如下任何捆绑.js在部署您的网站文件,因此没有必要使用提供.min.js-min.js文件.

这不一定是您特定问题的直接答案 - 这是完全规避问题的一种方法.