Связывание стиля для MVC4, не использующего файлы min

У меня есть 4 файла:

  • a.css
  • a.min.css
  • b.css
  • b.min.css

они добавляются к расслоению следующим образом:

bundles.Add(new StyleBundle("~/Content/acss").Include("~/Content/a.css", "~/Content/b.css"));

При запуске приложения в отладке все отображается правильно:

 <link href="/Content/a.css" rel="stylesheet"/>
 <link href="/Content/b.css" rel="stylesheet"/>

Однако при запуске в выпуске я его визуализировал следующим образом:

 <link href="/Content/acss?v=mUdXE7_fXKjICzE_XteIB1Igy6TekX1QFh-BtY6fFUw1" rel="stylesheet"/>

И внутри я основал:

/* Ошибка не выполнена. Возврат неустановленного содержимого. (24,708): ошибка времени выполнения CSS1030: ожидаемый идентификатор, найденный '.'

У меня есть два вопроса:

  • Почему он не работает в соответствии с документами в Интернете? Вся информация говорит, что он выбирает файл min, если он доступен для выпуска версии.
  • Как заставить его работать в соответствии с документацией?

Ответ 1

У меня была такая же проблема, что и у меня, мое решение содержало файлы css/js, сопровождаемые их .min файлами, которые я использовал веб-Essentials для минимизации.

Если я использовал пучки в режиме отладки, все будет работать правильно, и все отдельные файлы без минимумов будут загружены в мое приложение. Однако, если я устанавливаю BundleTable.EnableOptimizations = true;, тогда я получаю ошибки, потому что у него были проблемы с минимизацией моих файлов.

На основе http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification, где указано:

Для ASP.NET MVC 4 это означает, что при конфигурации отладки файл jquery-1.7.1.js будет добавлен в комплект. В выпуске конфигурации, добавится jquery-1.7.1.min.js. Объединение рамки следует нескольким общим соглашениям, таким как:

Выбор файла ".min" для выпуска, когда "FileX.min.js" и "FileX.js" существовать. Выбор версии ".min" для отладки.

Я ожидал, что он просто загрузит мои уже свернутые файлы и просто свяжет их. Я полагаю, что это подразумевается, но отсутствует в документации, заключается в том, что он также снова минимизирует мои уже сведенные к минимуму файлы, которые не работают и вызывают ошибки в выходе.

Я нашел http://aspnetoptimization.codeplex.com/workitem/56, в котором говорится:

Вы можете пропустить минимизацию, просто создав пучки без преобразовать, т.е. не создавать ScriptBundles, просто обычные Bundles.

Это оказалось ответом на мою проблему. Установив оба параметра ScriptBundle и StyleBundle, просто введите Bundle, теперь я получаю правильное связывание без минимизации.

В отладке все мои обычные файлы css/jss загружаются отдельно. Когда я устанавливаю его для не-отладки, все в комплекте и автоматически выбирает все .min файлы.

Ответ 2

Ваш реальный вопрос не отвечает, потому что он уже действует как состояние документации (вот почему я спросил, какую документацию вы его искали, но вы проигнорировали мой комментарий).

Если вы хотите сохранить то же поведение в режиме выпуска, используйте BundleTable.EnableOptimizations = false; в Global.asax. Это отключит привязку и минимизацию, если активен только в режиме отладки. Затем, чтобы использовать свои собственные мини файлы css/js, просто укажите путь ваших пакетов к мини-версиям.

В соответствии с документацией вы также можете использовать "~/Content/a{version}.css", который использовал бы неминифицированную версию в режиме отладки и мини-версию для выпуска. Однако я этого не пробовал.

Ответ 3

Вы посмотрели Bundle Transformer, он 1.6.5 version ввел свойство, называемое usePreMinifiedFiles, которое включает/отключает использование предварительно минированных файлов.

Установили ли вы BundleTable.EnableOptimizations = true;

Из документации

Примечание. Если EnableOptimizations не является истинным или атрибут отладки в компиляция Элемент в файле Web.config имеет значение false, файлы не будет в комплекте или не уменьшена. Кроме того, версия .min файлы не будут использоваться, будут выбраны полные версии отладки. EnableOptimizations переопределяет атрибут debug в компиляции Элемент в файле Web.config