Как заставить пакеты System.Web.Optimization работать с пользовательскими папками в виртуальном каталоге IIS?

У меня есть asp.net mvc4. У меня есть модули, которые развернуты как подкаталоги в этом приложении с использованием виртуальных каталогов IIS, и мне нужно ссылаться на файлы в этих модулях. Эти модули DLL регистрируют пакеты. Но пакеты ничего не генерируют на html-странице.

Из этого постаэто-он-возможно к блоку испытания bundleconfig-в-mvc4 Я вижу, что внутренне пакеты используют Server.MapPath. Похоже, это должно работать.

Я подключил BundleTable.MapPathMethod и даже вызвал сам Server.MapPath, который правильно разрешает правильный физический каталог. Но он все равно ничего не отобразит на html-странице.

Потом был этот пост,почему-делает-resolvebundleurl-не-работа-для-пользовательских папок , в котором упоминается & quot; AddDirectory & quot; функция для пользовательских папок, НО эта функция больше не доступна в самой последней библиотеке оптимизации.

Я также пытался использовать новый "IncludeDirectory". метод, но это тоже не сработало

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

Что-нибудь еще, я могу попытаться заставить это работать?

8/27/12

ОТВЕТНАЯ ЗАДАЧА: В основном System.Web.Optimization не работает с веб-URL-адресами, которые являются виртуальными каталогами sub IIS.

Проблема в том, что эти строки кода внутри BundleResolver.GetBundleContents

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

это в основном предполагает, что каждый отдельный файл будет находиться в папке PHYSICAL под основной папкой PHYSICAL веб-приложения.

Проблема, IMO, заключается в том, что относительный путь URL-адреса в Интернете, в котором выполняется поиск включаемых файлов, очень рано преобразуется в физический путь, и все ссылки на то, какой относительный путь URL-адреса используется для получения этих физических файлов, отбрасываются.

Итак, чтобы посмотреть, смогу ли я сделать это, мне пришлось декомпилировать System.Web.Optimization до чистого кода, а затем перекомпилировать снова, чтобы я мог «исправить» Это. Первым шагом было добавление свойства RelativePath в BundleItem, дополнительный конструктор для BundleItem, чтобы передать исходный относительный путь URL-адреса, чтобы сохранить папку каталога относительного поиска в Интернете. Затем я заменил приведенный выше код на цикл перед тем, как он в основном пытается сопоставить файлы, найденные с их BundleItem, чтобы они могли быть преобразованы обратно в действительный веб-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 должна создать файлы поддержки System.Web.Optimizations в виртуальных каталогах IIS. Особенно теперь, когда VS2012 имеет поддержку IIS Express, которая, наконец, значительно упростит создание модульных веб-приложений с файлами, на которые ссылаются виртуальные каталоги IIS.

Ответы на вопрос(2)

Ваш ответ на вопрос