我只是嘗試ASP.NET MVC 4,但我無法弄清楚如何禁用Javascript/CSS縮小功能。尤其對於開發環境來說,這對調試起到很大幫助。我可以想象它會是web.config中的一個開關,但是由於ASP.NET MVC 4目前還處於測試階段,因此實際上沒有太多信息。希望如果有人能夠幫助或指向正確的博客文章等如何禁用ASP.NET MVC 4 Beta中的Javascript/CSS縮小測試版
回答
在Global.asax.cs中
#if DEBUG
foreach (var bundle in BundleTable.Bundles)
{
bundle.Transform = new NoTransform();
}
#endif
現在已經在最新版本中更改,請參閱此答案的詳細信息:http://stackoverflow.com/a/11270224 – Michael 2012-08-03 00:09:38
@邁克爾:是的,但答案是正確的*爲beta *作爲OP請求:-)我仍然有一個MVC 4測試版網站尚未升級,很高興我找到了這個答案:-) – 2013-02-07 03:18:55
另一種選擇將創建一個HTML助手,你可以用它來建立腳本和鏈接標籤。以下是我已經爲JavaScript的,這也可以爲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());
}
}
現在,所有你需要做的就是把它在你的觀點:
<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>
,它會根據web.config中的調試設置將腳本渲染爲單獨的引用,或使用新的捆綁/縮小功能。如果你想看更多的例子,我使用http://codecutout.com/resource-minify-bundling的一些代碼作爲創建助手的參考。他們的幫手寫的更好一些,當提供無效參數時拋出異常,等等......我還沒有到處去清理我的。
如果您不希望內容被縮小,您可以在Global.asax中註冊自己的包並使用NoTransform
類。
我個人不希望我的腳本被轉換。我只是創建兩個腳本目錄。一個帶有調試腳本版本,另一個帶有最初下載的縮小版本。
MVC 4開箱即用縮小器(JsMinify)爲Opera打破了jQuery 1.7.1,所以我不想使用那個。我只是把下面幾行,我的Global.asax:Application_Start()
方法:
<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>
當然:
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);
隨着在地方,我可以簡單地添加的兩行我_layouts.cshtml
一方我們可以在這個地方得到更多時髦。我們只能生成一個包,並根據構建的類型選擇要包含的文件。
在Global.asax中調用EnableDefaultBundles()
,你可以做到這一點之後......
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();
}
}
不算漂亮(修改狀態由系統設置),但它比所有其他建議代碼少了很多,仍然允許您使用標準綁定行爲,並且不會對您的視圖進行任何更改。
我認爲這是正確的,如果這樣的功能將可「開箱即用」。
我貼在UserVoice.com反饋:http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/2702000-improve-system-web-optimization-bundle
給它你的 「聲音」。
嘗試System.Web.Optimization的新擴展 - Bundle Transformer。 Bundle Transformer實施了許多簡化調試的機會(請參閱documentation)。
與其替換JsMinify和CssMinify的實例,可以改爲使用接口。 此選項在早期版本中不可用,因爲第二個構造函數參數是類型而不是接口。
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);
或許也值得一提,對於附帶例如微細化以及非精縮版腳本jQuery的,可以使用一個輔助方法任選帶出 「.min」 爲DEBUG構建便於調試:
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"));
這是否停止js連接以及縮小?它也煩人的調試一個巨大的js文件。 – Alex 2012-05-30 06:28:50
可以從配置將其關閉:
<system.web>
<compilation debug="true" />
<!-- Lines removed for clarity. -->
</system.web>
http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
另一種替代方法(帶v1.1.0.0和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
}
}
論的新版本ASP.NET MVC只需添加
#if DEBUG
foreach (var bundle in BundleTable.Bundles)
{
bundle.Transforms.Clear();
}
#endif
後
BundleConfig.RegisterBundles(...);
- 1. ASP.net MVC測試版Beta 1
- 2. 如何使用JSON.NET與ASP.NET MVC 4 Beta
- 3. 如何禁用TestFlight beta測試?
- 4. MVC 4 Beta版並排安裝錯誤
- 5. 如何在ASP.NET MVC Beta 1中測試路由?
- 6. MVC 4 Portable Areas CSS/JS縮小版
- 7. 測試航班Beta測試:Xcode 6.3 Beta 4不顯示崩潰
- 8. ASP.NET MVC 4 JS縮小錯誤
- 9. ASP.NET MVC 4測試版 - 腳本里面的部分 - '{`missing
- 10. 我如何測試ASP.NET MVC 4 Web API中的自定義DelegatingHandler?
- 11. ASP.NET MVC 4個Beta版休息開發者預覽項目
- 12. ASP.NET MVC 4 Beta與Async CTP並排(版本3)
- 13. 保護ASP.NET MVC應用程序的beta測試?
- 14. 使用TestFlight測試iPhone應用程序的Beta測試版
- 15. 如何在ASP.NET MVC測試
- 16. ASP.NET MVC 4測試控制器
- 17. 如何完全禁用ASP.NET MVC中的成員提供者4
- 18. ASP.NET MVC 3測試版:TryUpdateModel在單元測試中拋出NullreferenceException
- 19. 測試版測試:應用未出現在Play商店Beta版中
- 20. ASP.NET MVC 4的WebAPI(測試版) - 如何改變最大響應緩衝區大小
- 21. Asp.net MVC測試
- 22. 如何在ASP.Net中測試ModelBinder Mvc 3
- 23. 如何禁用webview縮小?
- 24. Android社區中的Beta版測試測試人員收到不同版本
- 25. ASP.NET MVC 4應用程序捆綁和縮小,爲什麼在調試模式下啓用縮小?
- 26. ASP.net網頁的HTML縮小版
- 27. cloudKit beta測試
- 28. 如何禁用Twitter Bootstrap中的縮小/縮小圖像?
- 29. 最小單元測試失敗 - ASP.NET MVC
- 30. IModelBinder和ASP.NET MVC Beta
只是我的權利,或者是很可笑,這不是一個配置設置? – Jordan 2012-03-26 17:54:37
@Jeff:Ruby on Rails有其自身的侷限性,就像每個平臺一樣。 – 2012-04-19 17:34:49