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 не синхронизирована с текущей стабильной версией!