2012-10-19 18 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