2013-10-27 49 views
25

我剛剛在VS 2013 RTM上創建了一個新的MVC 5應用程序。 由於某些原因,我的CSS文件中的背景圖片url未被轉換。CssRewriteUrlTransform未被調用

因此,爲了調試問題,我創建了自定義的CssRewriteUrlTransform包裝器。 我發現我的斷點沒有被調用。

這是我在我的BundleConfig.cs

using System.Web.Optimization; 

namespace Utilities.Web 
{ 
    public class BundleConfig 
    { 
     private const string JQUERY_CDN_URL = "//code.jquery.com/jquery-1.10.1.min.js"; 

     public static void RegisterBundles(BundleCollection bundles) 
     { 
      bundles.UseCdn = true; 
      BundleTable.EnableOptimizations = true; 

      bundles.Add(new StyleBundle("~/css/coming-soon") 
       .Include("~/Content/Site/coming-soon.css", 
        new CssRewriteUrlTransformWrapper())); 

      bundles.Add(new ScriptBundle("~/js/coming-soon") 
       .Include("~/Scripts/jquery.placeholder.js") 
       .Include("~/Scripts/Site/coming-soon.js")); 

      bundles.Add(new ScriptBundle("~/js/jquery", JQUERY_CDN_URL) 
      { 
       CdnFallbackExpression = "window.jQuery" 
      }.Include("~/Scripts/jquery-{version}.js")); 
     } 
    } 

    public class CssRewriteUrlTransformWrapper : IItemTransform 
    { 
     public string Process(string includedVirtualPath, string input) 
     { 
      return new CssRewriteUrlTransform().Process(includedVirtualPath, input); 
     } 
    } 
} 
+0

你是否確切知道如果完全相同的代碼在MVC4(VS 2012)中工作? –

+0

不,我從來沒有用MVC 4試過它,但它確實與以前版本的Web Optimization Framework一起工作。 – Moon

+2

我遇到與MVC 4和Web優化v1.1.2相同的問題 –

回答

62

它出現的轉換不運行,如果你有CSS的縮小的版本。刪除.min.css文件,它應該開始工作。

+8

或者,您可以直接引用縮小版本,並且轉換似乎正常運行。 – Chris

+4

感謝Randall,我無法相信我浪費了多少時間:) – Richard

+4

希望我能投票贊成100次! – im1dermike

3

我本來希望把這個作爲評論在標記的答案下。但我無權這樣做。答案幫助了我。我還找到了另一個解決方案。在Bundle-configuration方法中加入:

  • BundleTable.Bundles.FileExtensionReplacementList.Clear();

這將避免將* .min.css文件自動包含在內。這個轉換將被調用。

問候漢斯

+0

對我而言,這種行爲似乎首先得到了實施。我無法計算出由於各種原因被這些.min文件咬了多少次。你的解決方案有點極端(它清除了完整的列表,而不是隻刪除.min文件),但實際上似乎沒有公共API去除一個元素......所以這是解決問題的最好方法,到目前爲止已經看到。 – youen