ASP.NET MVC 4 Объединение - отдельные URL-адреса файлов в режиме DEBUG

Проблема:

В офлайн-приложении HTML5, выполняемом в ASP.NET MVC 4.5, мы объединяем и уменьшаем стили и скрипты с помощью встроенной функции . Все работает хорошо с самими страницами, но для записи в манифест Cache, где (из-за того, что мы пишем его), он всегда излучает только связанный URL.

Итак, мы не можем отлаживать JavaScript в автономном режиме, так как отдельные файлы debug js не попадают в кэш приложения.

Код:

RegisterBundles

Вот как выглядит наш BundleConfig.RegisterBundles:

    // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/Scripts").Include(
                   "~/Scripts/*.js"
                   ));
    }

Разметка HTML

И мы включаем его в наш _Layout.cshtml для самих страниц следующим образом:

@System.Web.Optimization.Scripts.Render("~/bundles/Scripts")

Это хорошо работает для страниц, выделяя отдельные js файлы, когда debug есть true, и один связанный файл, когда debug - false.

Вывод в debug=true

<script src="/Scripts/ScriptOne.js"></script>
<script src="/Scripts/ScriptTwo.js"></script>
<script src="/Scripts/ScriptThree.js"></script>

Вывод в debug=false

<script src="/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1"></script>

Кэш-манифеста

И вот как мы включаем скрипты в наш CacheManifest

@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/Scripts")

Вывод в debug=true и debug=false

/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1

Что нам нужно?

Мы хотели бы знать, есть ли способ получить вывод Cache-Manifest следующим образом:

Вывод в debug=true

/Scripts/ScriptOne.js
/Scripts/ScriptTwo.js
/Scripts/ScriptThree.js

Вывод в debug=false

/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1

Ответ 1

Документация MSDN рассказывает об определенном методе Scripts.RenderFormat, который выглядел как хороший кандидат для выполнения того, что мы хотим. Но intellisense жаловался, что этот метод RenderFormat отсутствует в версии System.Web.Optimization, на которую ссылаются ссылки.

Но, спасибо (еще раз) Google, этот ответ здесь на SO объяснял, что этот метод RenderFormat на самом деле включен в следующую версию alpha выпуск. И комментарий к этому ответу, связанный со страницей, в которой объясняется, как мы можем его установить:

PM> Install-Package Microsoft.AspNet.Web.Optimization -Pre

В этой версии Cache-Manifest можно изменить на:

@System.Web.Optimization.Scripts.RenderFormat("{0}","~/bundles/Scripts")

И теперь мы видим, что манифест кэша выделяет отдельные файлы, а debug=true.

По-видимому, документация MSDN не синхронизирована с текущей стабильной версией!