我不确定是 Web 优化还是 WebGrease 如此挑剔,但其中一个(或两个)是,你需要非常小心。
首先,您的代码没有任何问题:
bundles.Add(new StyleBundle("~/content/css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
事实上,这正是微软所做的。他们不用于css的主要原因~/bundles
是图像的相对路径被搞砸了。考虑一下您的浏览器如何看待捆绑包 - 与它看待任何其他 URL 的方式完全相同,并且所有正常的路径相关规则仍然适用于相对路径。想象一下你的 CSS 有一个图像路径到../images/bullet.png
. 如果您使用~/bundles
的是浏览器,则会在上面bundles
实际不存在的目录中查找。它可能最终会~/images
在你可能拥有它的地方寻找~/content/images
。
我发现了一些可以真正破坏它并导致 404 错误的事情:
- 仅供参考:我的目录结构是
Content/CSS
包含images
CSS 图像的文件夹。
- 我必须
EnableOptimizations=true
在测试时强制使用捆绑包
- 您应该做的第一件事是“查看源代码”,然后单击 css 链接以查看它们是否有效
假设我们正在开发一个关于猫的网站。你可能有这个
@Styles.Render("~/Content/css/cats.css") // dont do this - see below why
bundles.Add(new StyleBundle("~/content/css/cats.css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
这会在您的 HTML 中生成指向此路径的 CSS 链接:
/Content/css/cats.css?v=JMoJspikowDah2auGQBfQAWj1OShXxqAlXxhv_ZFVfQ1
但是,这将给出 404,因为我放置了扩展名 .css 并且 IIS(我认为)会感到困惑。
如果我将其更改为此,则它可以正常工作:
@Styles.Render("~/Content/css/cats")
bundles.Add(new StyleBundle("~/content/css/cats").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
别人已经指出的另一个问题是你不能做
@Styles.Render("~/Content/css")
如果您的目录中有一个 css 目录或文件(不太可能有一个css
没有扩展名的文件) Content
。
另一个技巧是您需要确保生成的 HTML 具有版本号
<link href="/Content/css/cats?v=6GDW6wAXIN5DJCxVtIkkxLGpojoP-tBQiKgBTQMSlWw1" rel="stylesheet"/>
如果它没有并且看起来像这样,那么您的 Bundle 表和您的 cshtml 文件中的包名称可能不完全匹配。
<link href="/Content/css/cats" rel="stylesheet"/>