【问题标题】:MVC 4 Portable Areas CSS/JS minificationMVC 4 便携区域 CSS/JS 缩小
【发布时间】:2012-04-03 09:27:09
【问题描述】:

我使用 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>

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

谢谢

【问题讨论】:

  • “Mvc 4”中的旁注,~/Content/site.css 之类的 url 将自动转换为 Url.Content(),因此在您的代码中您不需要所有的 Url.Content,只需编写原始 url
  • 我知道这是一个老问题,您找到可行的解决方案了吗?个人观点:便携区内容已经作为嵌入式资源推入dll中,任何修改都必须重新编译,那为什么不在编译前缩小JS和CSS呢?试试 chirpy:chirpy.codeplex.com,只将你已经缩小的 JS+CSS 添加到 dll 中。
  • 不,我没有。您的解决方案的问题是我需要在我的项目中添加另一个库。我选择了 MVC4,因为我想删除其中的一些。不添加additionl。不过谢谢
  • 我认为这里的问题是您尝试导入文件夹。据我所知,这仅在您制作所谓的捆绑包时才有效。我不是如何做到这一点的专家,所以你应该谷歌它。

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


【解决方案1】:

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

将文件提取到临时文件中 - 需要对应用内的文件夹具有写入权限。 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")

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

【讨论】:

  • 这在 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 中的约定- 但这也没有解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多