ASP.Net MVC脚本捆绑导致404错误。

10

我在SO上搜索了许多相同的问题,但没有一个答案可以帮助我。

我已经建立了很多站点,以前从未遇到过这个问题。

实际上,我的脚本包导致我的JavaScript文件夹中的每个文件都出现404错误。

我的目录结构(目前,我已经多次更改它!)如下所示:

输入图像描述

我这样做是为了确保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(); 实际上没有清除它的列表,否则我会在 angular 之前有 jquery(这是我的意图)。

enter image description here

更新

如果我在我的bundles中启用 BundleTable.EnableOptimizations = true; 那么它就被捆绑、缩小并且工作正常 - 尽管这对开发调试来说很糟糕 - 是什么阻止了它在调试模式下工作?!


这可能只是您的截图不匹配,但错误中列出的路径显示您的脚本直接位于javascript文件夹下,而不是在您的目录结构截图中显示的子文件夹中。 - bingles
两个屏幕截图都是原样拍摄的。这太奇怪了...我会再检查一遍以防万一... - Darren Wainwright
是的 - 刚刚检查了一下,确实是这样显示的... - Darren Wainwright
你尝试过直接引用捆绑包之外的任何 .js 文件来查看页面是否可以提供它吗? - bingles
这听起来与您的问题非常相似 https://dev59.com/d2Eh5IYBdhLWcg3wRBn5 - bingles
显示剩余6条评论
4个回答

4
这篇文章似乎描述了与 ASP.NET MVC 5 子目录捆绑问题相同的问题,ASP.NET MVC 5子目录捆绑问题是版本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.1.3版本,哇!它工作了!你知道的,这是我最后想到要查看的东西;版本号 - 在经过这么多次修订之后,我有点期望这种事情能够正常工作。我将把你的回答标记为已解决。A)因为你提供了很大的帮助B)是我的版本号问题C)嗯...现在我很开心:D谢谢伙计。 - Darren Wainwright
很高兴能够帮忙。我之前没有意识到升级也是一个选项 :) - bingles
是的,我也不知道 :) - 首先尝试降级,结果一切都崩溃了,然后才发现这个项目已经落后两个版本了 :) 再次感谢 :) - Darren Wainwright

2
如果您将启用优化标志设置为true,它将覆盖debug=false并进行捆绑。只需在bundle.config文件中使用以下代码片段即可在debug模式下删除捆绑。
    #if !DEBUG
    BundleTable.EnableOptimizations = true;
    #endif

0

如上所述,我一直收到jquery 404未找到的错误。

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

我的问题出在以下方面,在开发中本地工作得非常愉快。

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

我尝试了不同的变化和选项,最终为生产环境更改为以下内容。Google的CDN一直可靠,如果你搜索一下还有其他CDN选项。

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

1
你的问题在于你正在捆绑文件的min版本。对于文件名中带有min的文件,捆绑是不起作用的。 - Darren Wainwright

0

我认为这是嵌套文件夹的问题。我非常确定bundle只会在该直接文件夹中查找。您以前使用过这种文件夹结构并成功地进行了绑定吗?


不是这样的。捆绑包中的第三个参数true告诉捆绑程序搜索子文件夹。这是我一直使用的结构,直到现在从未出现过问题。 - Darren Wainwright
看看他正在使用的重载…… - Jonesopolis
你在哪里渲染捆绑包? - valdetero
和往常一样,放在 _layout.cshtml 文件中 body 结束标签之前 - CSS 捆绑包正在正常工作。 - Darren Wainwright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接