Sto solo provando ASP.NET MVC 4 ma non riesco a capire come disabilitare la funzione di minimizzazione Javascript/CSS. Soprattutto per l'ambiente di sviluppo questo sarà di grande aiuto per il debug. Immagino che sarebbe un interruttore in web.config ma dal momento che ASP.NET MVC 4 è ancora in fase beta al momento non ci sono molte informazioni là fuori. Apprezzeremmo se qualcuno potesse aiutare o indicare i post del blog giusti ecc.Come disabilitare la minificazione Javascript/CSS in ASP.NET MVC 4 Beta
risposta
In Global.asax.cs
#if DEBUG
foreach (var bundle in BundleTable.Bundles)
{
bundle.Transform = new NoTransform();
}
#endif
Questo è ora cambiato nella versione più recente, vedere questa risposta per i dettagli: http://stackoverflow.com/a/11270224 – Michael
@ Michael: Sì, ma la risposta è corretta * per beta * come l'OP richiesto :-) I ho ancora un sito Web MVC 4 beta che deve ancora essere aggiornato e felice di aver trovato questa risposta :-) –
Un'altra opzione sarebbe quella di creare un helper HTML che potreste usare per creare lo script e i tag di collegamento. Ecco quello che ho implementato per il Javascript, che può anche essere fatto per il CSS:
public static class BundleHelper
{
public static MvcHtmlString JsBundle(this HtmlHelper helper, string bundlePath)
{
var jsTag = new TagBuilder("script");
jsTag.MergeAttribute("type", "text/javascript");
return ReferenceBundle(helper, bundlePath, jsTag);
}
public static MvcHtmlString ReferenceBundle(this HtmlHelper helper, string bundlePath, TagBuilder baseTag)
{
var httpContext = helper.ViewContext.HttpContext;
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
Bundle bundle = BundleTable.Bundles.GetBundleFor(bundlePath);
var htmlString = new StringBuilder();
if (bundle != null)
{
var bundleContext = new BundleContext(helper.ViewContext.HttpContext, BundleTable.Bundles, urlHelper.Content(bundlePath));
if (!httpContext.IsDebuggingEnabled)
{
baseTag.MergeAttribute("href", System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(bundlePath));
return new MvcHtmlString(baseTag.ToString());
}
foreach (var file in bundle.EnumerateFiles(bundleContext))
{
var basePath = httpContext.Server.MapPath("~/");
if (file.FullName.StartsWith(basePath))
{
var relPath = urlHelper.Content("~/" + file.FullName.Substring(basePath.Length));
baseTag.MergeAttribute("href", relPath, true);
htmlString.AppendLine(baseTag.ToString());
}
}
}
return new MvcHtmlString(htmlString.ToString());
}
}
Ora tutto quello che dovete fare è chiamare a vostro parere:
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title - My ASP.NET MVC Application</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="~/Content/css" rel="stylesheet" type="text/css" />
<link href="~/Content/themes/base/css" rel="stylesheet" type="text/css" />
@Html.JsBundle("~/scripts/js")
<meta name="viewport" content="width=device-width" />
</head>
E sarà renderizza gli script come riferimenti separati o usa la nuova funzione di raggruppamento/minificazione a seconda di quale sia l'impostazione di debug nel tuo web.config. Ho usato parte del codice da http://codecutout.com/resource-minify-bundling come riferimento quando creavo il mio helper se volevi vedere altri esempi. Il loro aiutante è scritto un po 'meglio, lanciando eccezioni quando vengono forniti argomenti non validi, ecc ... Non sono ancora riuscito a pulire il mio.
È possibile registrare i propri bundle nello Global.asax e utilizzare la classe NoTransform
se non si desidera che il contenuto venga ridotto.
Personalmente non voglio che il mio copione si trasformi del tutto. Creo solo due directory di script. Uno con le versioni degli script di debug e uno con le versioni minified originariamente scaricate.
Il minificatore di MVC 4 out of the box (JsMinify) interrompe jQuery 1.7.1 per Opera, quindi non voglio utilizzarlo. Ho appena messo le seguenti righe nel mio Global.asax: Application_Start()
metodo:
Bundle debugScripts = new Bundle("~/DebugScripts",
new NoTransform("text/javascript"));
debugScripts.AddDirectory("~/Scripts/Debug", "*.js");
BundleTable.Bundles.Add(debugScripts);
Bundle productionScripts = new Bundle("~/ProductionScripts",
new NoTransform("text/javascript"));
productionScripts.AddDirectory("~/Scripts/Minified", "*.js");
BundleTable.Bundles.Add(productionScripts);
Con questo in luogo posso semplicemente aggiungere uno di due linee nel mio _layouts.cshtml
:
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/DebugScripts")" type="text/javascript"></script>
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/ProductionScripts")" type="text/javascript"></script>
Naturalmente potremmo diventare un po 'più eccentrici con questo al suo posto. Potremmo generare un solo bundle e, in base al tipo di costruzione, selezionare quali file includere.
Dopo la chiamata a EnableDefaultBundles()
in Global.asax, si può fare questo ...
if (... running in development environment ...)
{
var registeredBundles = BundleTable.Bundles.GetRegisteredBundles();
foreach (var bundle in registeredBundles)
{
if (bundle.Transform is System.Web.Optimization.JsMinify)
bundle.Transform = new NoTransform();
}
}
Non abbastanza (modificando lo stato impostato dal sistema), ma è molto meno codice rispetto a tutti gli altri suggerimenti , consente comunque di utilizzare il comportamento di raggruppamento standard e non comporta alcuna modifica delle visualizzazioni.
penso che sarebbe giusto, se tale funzione sarà disponibile "out of the box".
ho inviato un feedback su UserVoice.com: http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/2702000-improve-system-web-optimization-bundle
dare il "voci".
Provare una nuova estensione per System.Web.Optimization - Bundle Transformer. In Bundle Transformer sono state implementate numerose opportunità per semplificare il debug (vedere documentation).
Invece di sostituire le istanze di JsMinify e CssMinify, è possibile utilizzare le interfacce. Questa opzione non era disponibile nelle versioni precedenti poiché il secondo parametro costruttore era un tipo anziché un'interfaccia.
IBundleTransform jsTransform;
IBundleTransform cssTransform;
#if DEBUG
jsTransform = new NoTransform("text/javascript");
cssTransform = new NoTransform("text/css");
#else
jsTransform = new JsMinify();
cssTransform = new CssMinify();
#endif
Bundle jsBundle = new Bundle("~/JsB", jsTransform);
Bundle cssBundle = new Bundle("~/CssB", cssTransform);
Forse anche la pena notare, per gli script che vengono spediti con le versioni minified e non minified esempio jQuery, si può utilizzare un metodo di supporto facoltativamente strip il ".min" per DEBUG per facilitare il debugging:
private string Min(string scriptNameIncludingMin)
{
#if DEBUG
return scriptNameIncludingMin.Replace(".min", ""); // Remove .min from debug builds
#else
return scriptNameIncludingMin;
#endif
}
// ...
jsBundle.AddFile(Min("~/Scripts/jquery-1.7.2.min.js"));
Questo ferma la concatenazione di js e il minifying? È anche fastidioso eseguire il debug di un singolo file js gigante. – Alex
si può spegnere da config:
<system.web>
<compilation debug="true" />
<!-- Lines removed for clarity. -->
</system.web>
http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
Un'altra alternativa (testato con v1.1.0.0 e MVC5):
public class BundleConfig
{
public static void Register()
{
ScriptBundle jsBundle = new ScriptBundle("~/Scripts/myscript.min.js");
jsBundle.Include("~/Scripts/myscript.js");
DisableInDebugMode(jsBundle);
BundleTable.Bundles.Add(jsBundle);
}
private static void DisableInDebugMode(ScriptBundle jsBundle)
{
#if DEBUG
// Don't minify in debug mode
jsBundle.Transforms.Clear();
#endif
}
}
sulle versioni più recenti di ASP.NET MVC è sufficiente aggiungere
#if DEBUG
foreach (var bundle in BundleTable.Bundles)
{
bundle.Transforms.Clear();
}
#endif
subito dopo
BundleConfig.RegisterBundles(...);
- 1. ASP.NET MVC C# Minificazione del rasoio
- 2. Come disabilitare la convalida del modello MVC 4?
- 3. ASP.NET MVC 4 WebAPI (beta) - come modificare la dimensione massima del buffer di risposta
- 4. Sovrascrittura appartenenza ASP.NET in ASP.NET MVC 4
- 5. personalizzato Asp.Net MVC 4
- 6. MVC lato 4 Beta da un errore di installazione lato
- 7. AntiForgeryToken deprecato in ASP.Net MVC 4 RC
- 8. Come Mock HttpContext.User.Identity.Name in Asp.Net MVC 4
- 9. ASP.NET MVC 4 Bundles
- 10. Applicazione ASP.NET MVC 4 con bundling e minification, perché la minificazione è abilitata in modalità di debug?
- 11. Come collegare la griglia Kendo in asp.net MVC 4 Razor
- 12. ASP.NET MVC 4 Funzioni mobili
- 13. Angular.js e ASP.NET MVC 4
- 14. Devo iniziare su ASP.NET MVC 1 o MVC 2 Beta?
- 15. Formato datetime in asp.net mvc 4
- 16. asp.net mvc 2 a MVC 4
- 17. MVC 4 - Come disabilitare questo pulsante in modo condizionale?
- 18. asp.net MVC 4 con StructureMap
- 19. ASP.NET MVC 4 - 301 Reindirizzamenti in RouteConfig.cs
- 20. errore JavaScript in Asp.Net MVC 4 Raggruppamento
- 21. ASP.NET MVC 4 e ExtensionlessUrlHandler
- 22. MVC MiniProfiler con ASP.NET MVC 4
- 23. Campo valuta ASP.NET MVC 4
- 24. Condizionale @ Scripts.Render in ASP.net MVC 4
- 25. Localizzazione in ASP.NET MVC 4 utilizzando App_GlobalResources
- 26. ASP.NET MVC 4 Cap convalida
- 27. lotti non Caricamento in ASP.NET MVC 4
- 28. Equivalente controllo utente in ASP.NET MVC 4
- 29. Impostazione chiave esterna in ASP.NET MVC 4
- 30. Utilizzando ASP.Net identità in MVC 4
Solo io, o è ridicolo che questa non è un'impostazione di configurazione? – Jordan
@Jeff: Ruby on Rails ha i propri limiti, così come ogni piattaforma. –