MVC 4便携式区域CSS / JS缩小

时间:2012-04-03 09:27:10

标签: asp.net-mvc minify portable-areas

我使用MVC 3 + Contrib Project PortableAreas将我的网络拆分为多个项目。 现在我转到MVC 4并希望为我的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>

它不起作用。 如何在便携式区域使用捆绑/缩小?

感谢

1 个答案:

答案 0 :(得分:1)

这里的问题是捆绑和缩小没有预见到处理除实际文件之外的任何其他内容。我在这里有两个解决方案。

将文件解压缩为临时文件 - 需要对应用程序内的文件夹具有写权限。 Here是处理它的代码。它使用名为“Static”的目录作为临时目标路径。您可以像这样使用它:

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

在模板中使用它就像在非便携式应用程序中使用它一样,所以@ 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")

请注意,此代码远非干净。它主要是逆向工程,可能会跳过几条路径,但到目前为止似乎有效。