19

我剛將一個ASP.NET MVC 3項目遷移到MVC 4/.NET 4.0,並安裝了NuGet包Microsoft.AspNet.Web.Optimization以支持CSS和JavaScript的捆綁和縮小。我幾乎已經捆綁/縮小工作,問題是這是總是啓用。即使應用程序處於調試模式(如Web.config中配置),所有JavaScript包含的內容都會被縮小。正如你可以從下面的XML代碼段看到,調試模式在Web.config中啓用:ASP.NET MVC 4應用程序捆綁和縮小,爲什麼在調試模式下啓用縮小?

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
    ... 
    </compilation> 
    ... 
</system.web> 

我的包構造的摘錄:

public class BundleConfig 
{ 
    public static void RegisterBundles(BundleCollection bundles) 
    { 
     ... 

     bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
        "~/Scripts/jquery-1.*", 
        "~/Scripts/jquery.form.js", 
        "~/Scripts/jquery.format.js")); 

     bundles.Add(new StyleBundle("~/Content/css").Include(
      "~/Content/Site.css")); 

     ... 
    } 
} 

CSS/JavaScript的包括在HTML的渲染例如:

<link href="/content/css" rel="stylesheet" type="text/css"> 
<script src="/bundles/jquery" type="text/javascript"></script> 

有沒有人有任何線索,爲什麼縮小在我的情況下啓用?我對這裏失去的東西感到不知所措。爲了排除故障,我創建了一個測試ASP.NET MVC 4互聯網應用程序,並且可以驗證CSS/JavaScript確實在而不是在此項目的調試模式下被縮小。

編輯:

在我_Layout.cshtml文件我呈現的樣式/腳本是這樣的:

@Styles.Render("content/css") 
@Scripts.Render("bundles/jquery") 

感謝浩,我意識到,我已經忘了前綴的束名稱用「〜/」。

+0

此問題可能有幫助。 [如何禁用ASP.NET MVC 4中的Javascript/CSS minification](http://stackoverflow.com/questions/9373071/how-to-disable-javascript-css-minification-in-asp-net-mvc-4? rq = 1) – jrummell 2012-08-14 12:49:39

+0

@jrummell這個問題的答案似乎是無條件禁用縮小?我只想要標準的條件縮小工作。 – aknuds1 2012-08-14 14:11:08

回答

17

紅旗在你的HTML渲染的鏈接/ script標籤:

這些應該包含版本哈希碼,如果你使用的腳本/ Style.Render,即

< script src="/bundles/jquery?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"/> 

要獲得調試/發佈MVC4模板正在使用的行爲,您還必須使用Script/Style.Render方法。調用這些方法時,你必須通過虛擬束的路徑,在你的榜樣:

@Styles.Render("~/content/css") 
@Scripts.Render("~/bundles/jquery") 

在調試模式下,你不應該在束(這將永遠是精縮/捆綁)指向鏈接/ script標籤。相反,您應該在調試模式下將腳本/鏈接標籤獲取到各個資源。

+1

謝謝你。但是不應該@ Scripts.Render(...)如果沒有給出虛擬路徑會拋出異常?你什麼時候想寫@ Scripts.Render(「/ bundles/jquery」),即沒有「〜」? – 2012-10-29 14:44:08

+0

它不限於捆綁網址,它們還會將腳本/鏈接標籤呈現給任意網址(相對和絕對)。長期來看,這些助手一般處理資產管理,而不僅僅是捆綁特定的助手。 – 2012-10-29 17:44:45

+1

好的,謝謝澄清。但是我們今天浪費了半天,因爲有人忘記了放入「〜」。 – 2012-10-29 17:49:19

2

我剛剛在一個全新的ASP.NET MVC項目上發生了這種情況。我在web.config中將<compilation debug="true" targetFramework="4.5.1" />設置爲true,並且仍在縮小輸出。

的修復

BundleConfig.cs(在App_Start)具有在底部BundleTable.EnableOptimizations = true;將其重寫我的web.config設定線....

取出管線和/或將其設置爲false,並且在調試環境中根據需要將我的腳本視爲未綁定/解除綁定。

我建議刪除該行,因爲這將覆蓋web.config。在web.config中進行設置具有使用web.config變換的優點,以便您可以創建不同的設置以部署到不同的環境。

欲瞭解更多信息,請參閱http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification並閱讀控制捆綁和縮小部分(大約在文章的中間)。

+1

這是問題我似乎BundleConfig.cs的默認模板已經隨着時間的推移而改變。我確定從來沒有曾經在那裏 – ScottG 2015-01-21 10:46:48