2012-04-03 76 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