2012-10-19 19 views
11

我有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. 如何根据文档使其工作?
+0

“为什么不按照在线文档工作?” “如何根据文档使其工作?” - 你在看哪些文档? – Pluc

+0

_CSS1030:预期的标识符,找到'。'_看起来你在你的css中有一个错误,这可能会导致缩小失败。 – ZippyV

+0

@ZippyV Minification不适用于某些浏览器特定的标签。问题与错误无关,但是为什么捆绑不使用最小文件,这已经在文件夹中。 – Marcin

回答

35

我有,你有完全相同的问题,我的解决方案包含伴随着我使用的Web要点,尽量减少他们的.min文件,CSS/JS文件。

如果我用在调试模式下束,一切都会正常工作和所有单个非最小化的文件会在我的应用程序加载。但是,如果我设置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。捆绑 框架如下几种常见的约定,如:

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

我希望它只是加载我已经最小化的文件,并将它们捆绑在一起。我相信暗示的,但在文档中缺少的是,它也将再次最小化我已经最小化的文件,这些文件不工作并且导致输出中的错误。

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

您只需创建一个没有 束变换跳过微小的,即不产生ScriptBundles,只是正常的捆绑。

事实证明,这是回答我的问题。通过设置我的两个ScriptBundleStyleBundle只需键入Bundle,我现在拿到没有最小化的正确捆绑。

在调试,我所有的常规CSS/JSS文件indidivually加载。当我将它设置为非调试时,所有东西都被捆绑在一起,它会自动选择所有的.min文件。

+4

你先生,是个学者和绅士。接得好。 – Khepri

+1

将ScriptBundle和StyleBundle更改为常规Bundle为我做了。但是,为什么微软在默认的mvc项目中加载jquery- {version} .js和jquery- {version} -min.js时不会默认使用Bundle? –

+0

谢谢!似乎主要的怪癖是它最小化.min文件。 –

0

有你看上去Bundle Transformer,这是1.6.5 version推出了一款名为usePreMinifiedFiles财产启用/禁用的预缩小的文件的使用。

你有没有设置BundleTable.EnableOptimizations = true;

documentation

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

+1

现在还没有,在我开始使用第三方工具之前,我希望得到一个答案,为什么Bundling不能按照文档工作。 – Marcin

+0

你可以尝试更长的命名的CSS,例如apple.css和banana.css。只是想知道是否与某些缩小的变量a或b发生冲突。当然,这是完全的猜测,也许很好。 – dove

+0

这只是一个例子。我的文件实际上被称为:_myfile.common.css_,_myfile.layout.all.css_,_myfile.common.min.css_,_myfile.layout.all.min.css_ – Marcin

1

您的实际问题不回答的,因为它已经作为文档状态(这就是为什么我问什么文档,你正在寻找它,但你选择忽略我的评论)。

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

根据文档,你也可以使用"~/Content/a{version}.css"它将使用在调试模式下不缩小的版本和精缩版发布。但是,我没有尝试过。

+0

我没有忽视你的评论。我没有看到有人问你。我能看到的唯一一个与文件名中的点有关。也许我是盲人,但看不到任何问题。现在回答它,[这里是](http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification)我在哪里看。有以下说法:_捆绑框架遵循几个常见约定,例如: 当“FileX.min.js”和“FileX.js”存在时,选择“.min”文件以供发布。选择非“.min”版本进行调试._ – Marcin

+0

对不起,现在我正在看。我看着不同的线程 – Marcin

+0

请阅读您提供的链接上发布的报价后的5行。这也是我发现我的信息发布此回复的地方,但您没有在那篇教程中提到的内容。 – Pluc