2012-04-03 73 views
0

我使用MVC 3 + Contrib項目PortableAreas將我的網絡分割爲多個項目。 現在我轉移到MVC 4,並希望爲我的CSS和JS使用新功能縮小。MVC 4 Portable Areas CSS/JS縮小版

但是,當我做的:的

<link href="@Url.Content("~/DSB/Styles/CSS")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/common/js")" type="text/javascript"> 

代替:

<link href="@Url.Content("~/DSB/Styles/Site.css")" rel="stylesheet" type="text/css" /> 
<link href="@Url.Content("~/Content/themes/smoothness/jquery-ui-1.8.12.custom.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/common/jquery-1.4.4.min.js")" type="text/javascript" /> 
<script src="@Url.Content("~/Scripts/common/jquery-ui-1.8.11.custom.min.js")" type="text/javascript"></script> 

這是行不通的。 如何在便攜式區域使用捆綁/縮小?

感謝

+0

中「的mvc 4」像'〜/內容/ site.css'一個URL一個側面說明 將自動轉換爲'Url.Content()' 所以在你的代碼,你並不需要所有的' Url.Content'只寫了原始網址 – 2012-04-03 10:11:14

+0

謝謝,不知道這個。 – Luka 2012-04-03 11:09:47

+0

我知道這是一個老問題,你找到了一個可行的解決方案嗎?個人觀點:可移植區域內容已經作爲嵌入式資源推入到dll中,您必須在任何修改時重新編譯它,爲什麼不在編譯之前縮小JS和CSS?試試chirpy:http://chirpy.codeplex.com/,只添加你已經縮小的JS + CSS到dll。 – 2012-06-20 23:03:54

回答

1

這裏的問題是,捆綁和微小沒有預見處理什麼比實際文件別的。我在這裏有2個解決方案。

將文件解壓縮到臨時文件 - 需要應用程序中的文件夾的寫入權限。 Here是處理該問題的代碼。它使用名爲「Static」的目錄作爲臨時目標路徑。您可以使用它像這樣:

bundles.Add(new Rebundler(assemblyWithPortableArea, "~/VirtualPathUsedForResource") 
       .Include("Fully.Qualified.Embeded.Resource.Name", "other...") 
       .Rebundle()); 

在模板中使用它exaxctly好像你在一個非便攜的應用程序使用它,所以@ Scripts.Render()或@ Styles.Render()

另一個解決方案涉及創建一堆允許使用嵌入資源的類。 Here是基類,這裏是scriptstyle捆綁包。這裏的用法:

bundles.Add(new EmbededStyleBundle(assemblyWithPortableArea, "~/VirtualPathUsedForResource") 
       .Include("~/AreaName/Content/themes/custom/jquery-ui.css")); 

通過這種方法,你需要使用this類來呈現的資源。因此,而不是使用@ Scripts.Render()或@ Styles.Render()的模板代碼看起來是這樣的:

@Assets.RenderStyles("virtual path here") 
@Assets.RenderScripts("virtual path here") 

注意,該代碼是遠遠乾淨。它大部分都是反向設計的,可能會略過一些路徑,但似乎目前工作。

+0

當web.config debug =「false」或BundleTable.EnableOptimizations = true;在日常調試中,腳本不會被渲染 - 可能是因爲files.Add(new FileInfo(resourceName));不存在。我猜RenderScripts刪除沒有找到的文件 - 你有解決這個問題嗎?我嘗試通過mvccontrib /AreaName/Scripts/file.js /AreaName/Styles/file.css中定義的路由使用路由來嵌入資源 - 遵循約定/Content/Styles/file.css,/ Content/Scripts/file。組裝中的js - 但是這並沒有解決它。 – 2013-03-29 23:37:32