【问题标题】:ASP.Net MVC Script Bundle results in 404ASP.Net MVC 脚本包导致 404
【发布时间】:2014-08-23 01:40:19
【问题描述】:

我搜索了 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(这是我的意图)

更新

如果我 BundleTable.EnableOptimizations = true; 在我的捆绑包中,那么它全部被捆绑、缩小并且可以工作 - 尽管这对于开发调试来说很糟糕 - 到底是什么阻止了它在调试模式下工作?!

【问题讨论】:

  • 这可能只是您的屏幕截图不匹配,但错误中列出的路径直接在 javascript 文件夹下显示您的脚本,而不是目录结构屏幕截图中显示的子文件夹。
  • 两个屏幕截图都是按原样拍摄的。这就是超级奇怪..我会仔细检查以防万一..
  • 是的 - 刚刚检查过,这正是它所显示的......
  • 这些文件是否存在于由于不在项目中而被隐藏的javascript根文件夹中?
  • 不。它列出的 .js 文件正是我的 javascript 文件夹结构中的文件。不确定它是否与配置中的某些处理程序有关,尽管也与这些处理程序有关

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


【解决方案1】:

这篇文章似乎描述了同样的问题ASP.Net MVC 5 sub-directory bundling issues,并且是捆绑框架 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,则捆绑非常智能,不会重复包含 jQuery.js。同样,如果您仍希望将各个子目录保留在子文件夹中,您可以对各个子目录进行多次 .IncludeDirectory 调用。

【讨论】:

  • 好吧 - 我刚刚升级到最新的 1.1.3,瞧!有效!你知道,这是我最不想看到的;版本 - 在经过这么多修改之后,有点期待这种事情能够奏效。我将把你的标记为已回答。 A)因为有很大的帮助 B)这是我的版本号 c)好吧..我现在是一只快乐的兔子:D 谢谢芽
  • 很高兴为您提供帮助。没有意识到升级也是一种选择:)
  • 是的,我也没有 :) - 首先尝试降级,这只是杀死了一切,然后注意到我在这个项目上落后了 2 个版本 :) 再次感谢 :)
【解决方案2】:

如果您将启用优化标志设置为 true,它将覆盖 debug=false 并捆绑它。只需在 bundle.config 文件中使用以下代码 sn-p 即可在调试模式下删除捆绑。

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

【讨论】:

    【解决方案3】:

    我认为是嵌套文件夹。我很确定这些捆绑包只在那个直接文件夹中查找。您之前是否使用过 捆绑的文件夹结构并成功运行?

    【讨论】:

    • 不正确。包中的第三个参数true 告诉捆绑搜索子文件夹。这是我一直使用的结构,直到现在都没有遇到过问题。
    • 看看the overload他正在使用...
    • 你在哪里渲染包?
    • 和我往常一样的地方 - _layout.cshtml 就在关闭 body 之前 - css 包按原样工作
    【解决方案4】:

    如前所述,我一直找不到 jquery 404。

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

    我的问题在于以下问题,这在本地开发中非常顺利。

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

    我尝试了变化并查看了其他选项,最后我将其更改为以下用于生产。谷歌的 CDN 一直很可靠,如果你用谷歌搜索,还有其他的 CDN 选项。

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

    【讨论】:

    • 您的问题是您正在捆绑文件的最小版本。捆绑不适用于文件名中包含 min 的文件。
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 2011-01-04
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多