Почему ResolveBundleUrl не работает для пользовательских папок?(MVC Beta 4) - PullRequest
20 голосов
/ 10 марта 2012

Из совершенно нового веб-приложения ASP.NET MVC 4 Beta я перестраиваю свои папки в соответствии с примером VidPub.Web Роба Конери

В частности, это означает, чтоокончательная структура каталогов для содержимого выглядит следующим образом

VidPub.Web
 |
 ---Public
    |
    |---Images
          |--- *.png 
    |---javascripts
          |--- *.js 
    |---stylesheets
         |----themes
              |---base  
                  |--- images
                  |--- *.css
        |----site.css

Однако, когда я изменяю следующие строки в _Layout.cshtml

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Content/css")" 
           rel="stylesheet" 
           type="text/css" />

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Content/themes/base/css")" 
           rel="stylesheet" 
           type="text/css" />

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
             "~/Scripts/js")"></script>

на

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Public/stylesheets/css")"
           rel="stylesheet" 
           type="text/css" />

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Public/stylesheets/themes/base/css")" 
           rel="stylesheet" 
           type="text/css" />

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Public/javascripts/js")"></script>

Iв конечном итоге ничего не получится в полученном HTML.

<link rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" />
<script></script>

Почему он не собирает файлы в их новых местах?

Ответы [ 2 ]

25 голосов
/ 29 марта 2012

Под Application_Start в Global.asax.cs используйте BundleTable.Bundles.EnableDefaultBundles(); вместо BundleTable.Bundles.RegisterTemplateBundles();

Если вы посмотрите на источник для RegisterTemplateBundles, вы увидите, что он на самом деле ищет (и добавляет) только определенные файлы js и css. EnableDefaultBundles, с другой стороны, делает то же самое, что и при добавлении собственных пакетов.

21 голосов
/ 10 марта 2012

Похоже, вы должны зарегистрировать свой собственный пакет при использовании каталогов не по умолчанию. Я добавил следующее к Application_Start, и это устранило проблему

var bundle = new Bundle("~/Public/stylesheets/css", new CssMinify());
bundle.AddDirectory("~/Public/stylesheets", "*.css", true);
BundleTable.Bundles.Add(bundle);

bundle = new Bundle("~/Public/javascripts/js", new JsMinify());
bundle.AddDirectory("~/Public/javascripts", "*.js", true);
BundleTable.Bundles.Add(bundle);
...