ASP.NET捆绑包在任意位置查找文件

时间:2015-09-16 16:49:29

标签: asp.net

我手动将所有css / js添加到我的布局中,就像在页面上一样。我决定我也可以简单地使用捆绑包(显然不是)。

导致问题的第一个捆绑包:

            bundles.Add(new StyleBundle("~/Content/css").Include(
                  "~/Content/bootstrap.css",
                  "~/font-awesome-4.4.0/css/font-awesome.css",
                  "~/Content/daterangepicker-bs3.css",
                  "~/Content/bootstrap-dropdown-checkbox.css",
                  "~/Content/kendo/2015.2.624/kendo.common.min.css",
                  "~/Content/kendo/2015.2.624/kendo.mobile.all.min.css",
                  "~/Content/kendo/2015.2.624/kendo.dataviz.min.css",
                  "~/Content/kendo/2015.2.624/kendo.default.min.css",
                  "~/Content/kendo/2015.2.624/kendo.dataviz.default.min.css",
                  "~/Content/site.css"));

这会导致错误,例如:

http://localhost:58703/Content/images/kendoui.ttf?v=1.1 Failed to load resource: the server responded with a status of 404 (Not Found)

http://localhost:58703/fonts/fontawesome-webfont.woff2?v=4.4.0 Failed to load resource: the server responded with a status of 404 (Not Found)

我应该注意到,关于这些错误最荒谬的部分是,如果我点击它说它无法找到该文件的网址,则文件就在那里,正是它所说的位置它无法找到它们。

导致问题的下一个捆绑包:

            bundles.Add(new ScriptBundle("~/bundles/mapcrap").Include(
                "~/Scripts/daterangepicker.js",
                "~/Content/bootstrap-dropdown-checkbox.js",
                "~/Scripts/kendo/2015.2.624/jszip.min.js",
                "~/Scripts/kendo/2015.2.624/kendo.all.min.js",
                "~/Scripts/kendo/2015.2.624/kendo.aspnetmvc.min.js",
                "~/Scripts/kendo.modernizr.custom.js",
                "~/Content/jscolor.js",
                "~/Scripts/graphstuff.min.js"));

这会导致愚蠢的行为,如:

http://localhost:58703/jscolor/arrow.gif  Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:58703/jscolor/hs.png  Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:58703/jscolor/cross.gif  Failed to load resource: the server responded with a status of 404 (Not Found)

我已经尝试了一些我在搜索时发现的修复程序,其中大多数都引用了1.1.1版本的问题。但是,我相信这是几年前的事情。除非M $还没有真正使捆绑的东西发挥作用。

它的出现似乎正在制作随机URL。现在正在

中寻找'kendoui.woff'
'\Content\images\kendoui.woff'

当正确的位置

\Content\kendo\2015.2.624\images\kendoui.woff

4 个答案:

答案 0 :(得分:11)

我有点晚了但是对于font-awesome /fonts/fontawesome-webfont.woff2?v=4.4.0得到了同样的404错误并通过将这些行添加到<system.webServer>下的web.config文件来修复它:

<staticContent>
  <remove fileExtension=".woff" />
  <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
  <remove fileExtension=".woff2" />
  <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
</staticContent>

答案 1 :(得分:2)

MS确实有一个类来处理这个问题,只需使用以下代码就可以了:

bundles.Add(new StyleBundle("~/bundles/css").Include(
                "~/Content/css/*.css", new CssRewriteUrlTransform()));

注意CssRewriteUrlTransform,它会在缓存捆绑包之前将css中的相对链接更改为正确的链接。

答案 2 :(得分:2)

请查看Telerik澄清: http://docs.telerik.com/kendo-ui/aspnet-mvc/fundamentals#css-bundling

捆绑必须以这种方式完成:

bundles.Add(new StyleBundle("~/Content/kendo/...VERSION.../css").Include(
"~/Content/kendo/...VERSION.../kendo.common.min.css",
"~/Content/kendo/...VERSION.../kendo.default.min.css"));

答案 3 :(得分:1)

您遇到的问题不是由于捆绑包本身存在任何问题,而是捆绑的文件中的资源正在引用具有相对路径的其他文件。由于您的包具有与物理文件不同的路径结构,因此相对路径无法正确引用文件。

要纠正此问题,您可以操纵束路径结构以使相对路径仍然正确,或者您可以将相对路径(../ images/whatever.gif)更改为绝对路径(/ images / whatever。 gif或http://www.someothersite.com/whatever.gif)。

在IIS中为.woff文件配置的MIME类型丢失也可能存在问题,即使该文件存在,也会导致404.