2013-10-27 35 views
25

Ho appena creato una nuova app MVC 5 su VS 2013 RTM. Per qualche motivo l'URL dell'immagine di sfondo nei miei file CSS non veniva trasformato.CssRewriteUrlTransform non viene chiamato

Quindi, per eseguire il debug del problema, ho creato il mio wrapper personalizzato CssRewriteUrlTransform. E ho scoperto che il mio punto di interruzione non viene chiamato.

Questo è quello che ho nelle mie 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

Sapete con certezza se lo stesso codice funziona in MVC4 (VS 2012)? –

+0

No. Non l'ho mai provato con MVC 4. Funziona con la versione precedente di Web Optimization Framework. – Moon

+2

Ho riscontrato lo stesso problema con MVC 4 e Web Optimization v1.1.2 –

risposta

62

Sembra la trasformazione non funziona se si dispone della versione minified del CSS. Rimuovere il file. Min.css e dovrebbe iniziare a funzionare.

+8

In alternativa, è possibile fare riferimento direttamente alla versione ridotta e la trasformazione sembra essere eseguita correttamente. – Chris

+4

Grazie Randall, non posso credere quanto tempo ho sprecato per questo :) – Richard

+4

Vorrei poter votare questo 100 volte! – im1dermike

3

Mi sarebbe piaciuto mettere questo come commento sotto la risposta contrassegnata. Ma non ho il diritto di farlo. La risposta mi ha aiutato. Ho anche trovato un'altra soluzione per questo. Nel metodo di configurazione Bundle, aggiungere:

  • BundleTable.Bundles.FileExtensionReplacementList.Clear();

Ciò eviterà l'inclusione automatica del file * .min.css. E la trasformazione sarà chiamata.

Saluti Hans

+0

Sembra strano che questo comportamento sia stato implementato in primo luogo. Non riesco a contare quante volte sono stato morso da questi file. Min per vari motivi. La tua soluzione è un po 'estrema (cancella l'elenco completo invece di rimuovere solo i file .min), ma in realtà sembra che non ci siano API pubbliche per rimuovere solo un elemento ... Quindi è il modo migliore per risolvere il problema I' ho visto finora. – youen

Problemi correlati