13

我有 4 个文件:

  • a.css
  • a.min.css
  • b.css
  • b.min.css

它们以下列方式添加到捆绑包中:

bundles.Add(new StyleBundle("~/Content/acss").Include("~/Content/a.css", "~/Content/b.css"));

在调试中运行应用程序时,所有内容都正确呈现:

 <link href="/Content/a.css" rel="stylesheet"/>
 <link href="/Content/b.css" rel="stylesheet"/>

但是,当在发行版中运行时,我以以下方式呈现它:

 <link href="/Content/acss?v=mUdXE7_fXKjICzE_XteIB1Igy6TekX1QFh-BtY6fFUw1" rel="stylesheet"/>

我在里面创立:

/* 缩小失败。返回未缩小的内容。(24,708):运行时错误 CSS1030:预期标识符,找到“。”

所以我有两个问题:

  1. 为什么它不能根据在线文档工作?所有信息都说如果可用于发布版本,它会选择最小文件?
  2. 如何使其根据文档工作?
4

3 回答 3

37

我遇到了与您完全相同的问题,我的解决方案包含 css/js 文件以及我使用 Web Essentials 最小化的 .min 文件。

如果我在调试模式下使用捆绑包,一切都会正常工作,并且所有单独的非最小化文件都将加载到我的应用程序中。但是,如果我设置BundleTable.EnableOptimizations = true;然后我会得到错误,因为它无法最小化我的文件。

基于http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification其中指出:

对于 ASP.NET MVC 4,这意味着使用调试配置,文件 jquery-1.7.1.js 将被添加到包中。在发布配置中,将添加 jquery-1.7.1.min.js。捆绑框架遵循几个常见的约定,例如:

当“FileX.min.js”和“FileX.js”存在时选择“.min”文件发布。选择非“.min”版本进行调试。

我希望它可以简单地加载我已经最小化的文件并将它们捆绑在一起。我认为隐含但在文档中缺少的是,它还将再次最小化我已经最小化的文件,这些文件不起作用并导致输出错误。

我发现http://aspnetoptimization.codeplex.com/workitem/56提到:

您可以简单地通过创建不带转换的捆绑包来跳过缩小,即不创建 ScriptBundles,只创建普通捆绑包。

这原来是我的问题的答案。通过将 myScriptBundle和都设置StyleBundle为 type Bundle,我现在可以在没有最小化的情况下获得正确的捆绑。

在调试中,我所有的常规 css/jss 文件都是单独加载的。当我将其设置为非调试时,所有内容都被捆绑并自动选择所有 .min 文件。

于 2013-02-13T16:31:28.083 回答
1

您的实际问题无法回答,因为它已经充当文档状态(这就是为什么我问您正在查看什么文档,但您选择忽略我的评论)。

如果您想在发布模式下保持相同的行为,BundleTable.EnableOptimizations = false;请在您的Global.asax. 这将关闭仅在调试模式下活动的捆绑和缩小。然后使用您自己的缩小 css / js 文件,只需将您的捆绑路径指向缩小版本。

根据文档,您还可以使用"~/Content/a{version}.css"which 在调试模式下使用非缩小版本,在发布时使用缩小版本。但是,我没有尝试过。

于 2012-10-19T13:35:14.870 回答
0

你看过Bundle Transformer吗,它的1.6.5 版本引入了一个名为usePreMinifiedFiles的属性,它启用/禁用预压缩文件的使用。

你设置了吗BundleTable.EnableOptimizations = true;

文档

注意:除非 EnableOptimizations 为 true 或 Web.config 文件中的编译元素中的 debug 属性设置为 false,否则不会捆绑或缩小文件。此外,不会使用 .min 版本的文件,将选择完整的调试版本。EnableOptimizations 覆盖 Web.config 文件中编译元素中的调试属性

于 2012-10-19T10:22:24.437 回答