-->

我如何获得System.Web.Optimization捆绑在一个IIS虚拟目录自定义文件夹的工作?

2019-06-27 07:47发布

我有一个asp.net mvc4。 我有部署为使用IIS虚拟目录此应用程序中的子目录模块和我需要这些模块中引用的文件。 这些模块DLL被注册束。 但束不产生任何东西到HTML页面。

从此信息中, 是-IT-可能对单元测试-bundleconfig合mvc4 ,我看到内部的束被使用使用Server.Mappath。 所以它看起来像它应该工作。

我迷上BundleTable.MapPathMethod甚至有人称自己使用Server.Mappath其中不正确解析到正确的物理目录。 但它仍然不会呈现任何东西到HTML页面。

再有就是这个帖子, 为什么此结果resolvebundleurl -不工作的定制文件夹中,提到自定义文件夹的“AddDirectory”的功能,但这种功能不再可用在最近的优化库。

我也尝试利用新的“IncludeDirectory”的方法,但没有任何工作

ScriptBundle scriptBundle = new ScriptBundle("~/bundles/jquery");
scriptBundle.IncludeDirectory(basePath + "/Scripts/","jquery-1.*");
bundles.Add(scriptBundle);

还有什么我可以尝试,使这项工作?


12年8月27日

问题回答说:基本上System.Web.Optimization不适用于网络的网址是子IIS虚拟目录工作。

问题是内部BundleResolver.GetBundleContents这行代码

string mapPathMethod = this.MapPathMethod("~/");
if (!file.FullName.StartsWith(mapPathMethod, StringComparison.OrdinalIgnoreCase))

基本上假定被捆绑将成为主要的Web应用程序的物理文件夹下一个物理文件夹的每一个文件。

这个问题,国际海事组织,是被搜索的网站相对URL路径的文件,包括被转换成物理路径很早就和所有参考什么用得到这些物理文件的相对URL路径被扔掉。

所以,看看我能完成这项工作,我不得不反编译System.Web.Optimization裸代码,然后重新编译,所以我可以“修复”了。 第一步是到RelativePath属性添加到BundleItem,一个额外的构造函数BundleItem传承下去源相对URL路径为了维护网络相对搜索目录文件夹了。 然后,我与循环替换上面的代码之前,基本上试图复赛与他们的BundleItem发现的文件,以便它们可以被转换回一个有效的Web URL

foreach (BundleItem bundleItem in bundleFor.Items)
{
  if (file.FullName.StartsWith(bundleItem.Path, StringComparison.OrdinalIgnoreCase)){
    string str = file.FullName.Replace(bundleItem.Path,bundleItem.RelativePath);
    str = str.Replace('\\', '/');
    strs.Add(str);
    break;
  }
}

现在我的包被正确渲染。 但是请注意,我还没有测试过这个破解补丁发布或优化或者缩小上。

我真的认为asp.net队应该在IIS虚拟目录System.Web.Optimizations支持文件。 特别是现在的VS2012对IIS Express的支持,这将最终使人们更方便建立与文件模块化Web应用程序通过IIS虚拟目录被引用

Answer 1:

AddDirectory已更名IncludeDirectory所以你还是可以试试。



Answer 2:

你应该能够做到这一点使用的VirtualPathProvider如果配置得当。

见我的答案在这里对如何注册信息: BundleTable.Bundles.GetBundleFor()的回报,但不属于项内



文章来源: How do I get System.Web.Optimization bundles to work with custom folders in an IIS virtual directory?