Ответ 1
Я испытал это раньше, когда использую связывание.
Скажем, например, ваш файл css находится по адресу: /Content/css/css.css
Этот файл css затем ссылается на другой файл или, например, на изображение /Content/images/image1.png
через url('../images/image1.png')
.
Затем вы настраиваете свой комплект css @ /bundles/css
.
Все отлично работает в режиме отладки. Однако, когда вы устанавливаете <compilation debug="false" ....
в свой web.config, неожиданно удаляются ссылки, сделанные в файле css. Если вы откроете консоль в инструментах Firebug/Chrome dev и проверьте сетевые вкладки, вы увидите ресурсы, которые не загружаются с неправильного URL.
Это происходит потому, что, когда режим отладки отключен, все файлы связаны и минимизируются, как если бы они были на производстве. В этом случае файл CSS будет в комплекте и обслуживаться с URL /bundles/css
. Это приводит к нарушению относительной ссылки URL. Где он когда-то ссылался на /Content/images/image1.png
, теперь он ссылается на /images/image1.png
.
У вас есть несколько вариантов решения этой проблемы:
- Служите ваши вложенные файлы css из той же папки, что и фактические файлы css. например.
/Content/css/cssbundle
. Это может стать очень утомительным. - Измените все относительные ссылки в ваших файлах css на абсолютные ссылки. например.
../images/image1.png
станет/Content/images/image1.png
. Это означает, что вы не можете использовать много сторонний CSS, поставляемый из коробки, вам нужно будет проверить/изменить относительные ссылки, если вы хотите связать их. - Используйте пакет BundleTransformer nuget. Он автоматически преобразует относительные URL-адреса в абсолютные во время процесса связывания.
Основные отличия классов StyleTransformer и ScriptTransformer от стандартных реализаций: способность исключать ненужные активы при добавлении активов из каталога, не приводит к переоценке предварительно профинансированных активов, поддерживает автоматическое преобразование относительных путей до абсолютного значения в CSS-коде (с помощью UrlRewritingCssPostProcessor) и т.д.