ASP.Net MVC Script Bundle导致404

时间:2014-08-23 01:40:19

标签: asp.net asp.net-mvc bundling-and-minification

我搜索了SO - 发现了许多相同的问题,但答案都没有帮助。

我已经构建了一堆网站,之前没有遇到过这个问题。

基本上,我的脚本包会为我的javascript文件夹中的每个文件生成404.

我的结构(此刻,我已经改变了一堆!)看起来像这样:

enter image description here

我这样做,所以我可以保证ASP.Net不会改变顺序 - 我可以确保某些脚本领先于其他脚本。它是我一直如此做的,而且通常效果很好。

我的捆绑脚本 - 目前 - 是:

        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.FileSetOrderList.Clear();
            // stlyes
            StyleBundle cssBundle = new StyleBundle("~/bundles/css");
            cssBundle.IncludeDirectory("~/content/css", "*.css", true);
            bundles.Add(cssBundle);


            //scripts
            ScriptBundle jsBundle = new ScriptBundle("~/bundles/jscript");
            jsBundle.IncludeDirectory("~/content/javascript", "*.js", true);
            bundles.Add(jsBundle);

        }

我尝试过一大堆虚拟路径。

我的CSS加载完美。我的Js - 我得到了404的列表;每个* / js文件一个。

有什么想法吗?

我的控制台看起来像这样 - 这也告诉我bundles.FileSetOrderList.Clear();实际上并没有清除它的列表,否则我会在角度之前得到jquery(这是我的意图)

enter image description here

更新

如果我的捆绑包中有BundleTable.EnableOptimizations = true;,那么它们全部捆绑,缩小并且可以工作 - 虽然这很难用于开发调试 - 究竟是什么阻止它在调试模式下工作?!

4 个答案:

答案 0 :(得分:4)

这篇文章似乎描述了同样的问题ASP.Net MVC 5 sub-directory bundling issues,并且是Bundling框架1.1.1版的已知问题。

如果您不想降级或升级到有效的版本,您始终可以选择将文件显式添加到您想要首先使用的软件包中。假设您将文件放在同一个文件夹中。

/javascript/lib/ascript.js
/javascript/lib/ascript2.js
/javascript/lib/jquery.js
/javascript/lib/yscript.js

您可以通过Include()首先明确您想要的文件,然后通过IncludeDirectory()将其余文件整合在一起。

bundles.Add(new ScriptBundle("~/bundles/jscript").Include(
    "~/javascript/lib/jquery.js",
    .IncludeDirectory("~/javascript/lib", "*.js")

捆绑是足够聪明的,如果首先明确添加了jQuery.js,它就不会加倍。同样,如果你想让它们保持子代,你可以在你的各个子目录上有多个.IncludeDirectory调用。

答案 1 :(得分:2)

如果将enable optimization标志设置为true,它将覆盖debug = false并将其捆绑。只需使用bundle.config文件中的以下代码片段即可在调试模式下删除捆绑。

    #if !DEBUG
    BundleTable.EnableOptimizations = true;
    #endif

答案 2 :(得分:0)

我认为它是嵌套文件夹。我非常确定捆绑包只能查看该直接文件夹。您之前是否使用过捆绑的文件夹结构并且它成功运行了吗?

答案 3 :(得分:0)

如上所述,我一直没有找到jquery 404。

这不是一个很好的答案,但这是我解决的问题,直到找到更好的答案。

我的问题是以下情况,这在本地开发中非常愉快。

bundles.Add(new ScriptBundle("~/jquery").Include(new[]
                                                                     {
                                                                         "~/scripts/jquery-1.12.0.min.js",
                                                                     })); 

我尝试了变体并查看了其他选项,最后我将其更改为以下内容进行制作。 Googles CDN一直很可靠,如果你谷歌可以使用其他CDN选项。

bundles.Add(new ScriptBundle("~/jquery", "https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"));