我不确定是网站优化还是WebGrease过于挑剔,但其中一个(或两者)是这样的,你需要非常小心。
首先,你的代码没有任何问题:
bundles.Add(new StyleBundle("~/content/css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
实际上,这正是微软所做的。他们不使用~/bundles
作为CSS的主要原因是相对路径对于图像会出现问题。想想你的浏览器如何查看一个bundle——和它查看任何其他URL的方式完全相同,所有普通的路径相关规则在相对路径方面仍然适用。想象一下,如果你的CSS中有一个到../images/bullet.png
的图像路径。如果你使用~/bundles
,那么浏览器会在一个不存在的bundles
目录的上级目录中查找。它最终可能会在~/images
中查找,而你实际上将其放在了~/content/images
中。
我发现几件事情可能真的会破坏它并导致404错误:
- FYI:我的目录结构是包含CSS图像文件夹的
Content/CSS
- 我已经将
EnableOptimizations=true
设置为在测试时强制使用bundles
- 你应该做的第一件事是“查看源代码”,只需单击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
然而,由于我使用了扩展名.css,IIS(我想)会混淆,因此这将导致404错误。
如果我将它更改为以下内容,则可以正常运行:
@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")
如果您的Content
目录中有一个CSS目录或文件(不太可能有一个没有扩展名的文件名为css
的文件)。
另一个技巧是,您需要确保生成的HTML具有版本号。
<link href="/Content/css/cats?v=6GDW6wAXIN5DJCxVtIkkxLGpojoP-tBQiKgBTQMSlWw1" rel="stylesheet"/>
如果它看起来像这样,而且没有显示出来,那么你在 Bundle 表和 cshtml 文件中的包名称可能并不完全匹配。
<link href="/Content/css/cats" rel="stylesheet"/>
css
文件,结果出现了同样的问题。也许是因为我把我的css文件放在/content/css/
文件夹中而不是仅仅放在/content/
中,但我怀疑这个原因... - Stan