Приложение ASP.NET MVC 4 со связью и минификсацией, почему включен режим миниатюр в режиме отладки?
Я только что перенес проект ASP.NET MVC 3 в MVC 4/.NET 4.0 и установил пакет NuGet Microsoft.AspNet.Web.Optimization
, чтобы поддерживать связывание и минимизацию CSS и JavaScript. У меня довольно много работы по связыванию/минимизации, проблема в том, что она всегда включена. Несмотря на то, что приложение находится в режиме отладки, как указано в Web.config, все включенные JavaScript включены. Как видно из приведенного ниже фрагмента XML, режим debug включен в Web.config:
<system.web>
<compilation debug="true" targetFramework="4.0">
...
</compilation>
...
</system.web>
Отрывок из моей конфигурации пучка:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
...
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-1.*",
"~/Scripts/jquery.form.js",
"~/Scripts/jquery.format.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/Site.css"));
...
}
}
CSS/JavaScript включают в себя HTML-код, например:
<link href="/content/css" rel="stylesheet" type="text/css">
<script src="/bundles/jquery" type="text/javascript"></script>
Есть ли у кого-нибудь подсказка, почему в моем случае включена функция minification? Я в недоумении относительно того, чего мне здесь не хватает. Чтобы устранить неполадки, я создал тестовое интернет-приложение ASP.NET MVC 4 и мог убедиться, что CSS/JavaScript не был включен в режим отладки для этого проекта.
EDIT:
В моем файле _Layout.cshtml я визуализую стили/скрипты следующим образом:
@Styles.Render("content/css")
@Scripts.Render("bundles/jquery")
Благодаря Хао, я понимаю, что я забыл приписать имена пакетов с ~ ~/".
Ответы
Ответ 1
Красный флаг со ссылками / script тегами, отображаемыми в вашем HTML:
Они должны содержать хэш-код версии, если вы используете Script/Style.Render, i.e.
< script src="/bundles/jquery?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"/>
Чтобы получить поведение отладки/выпуска, которое используют шаблоны MVC4, вы также должны использовать методы Script/Style.Render. При вызове этих методов вы должны передать виртуальные пучки пакетов в вашем примере:
@Styles.Render("~/content/css")
@Scripts.Render("~/bundles/jquery")
В режиме отладки вы не должны получать теги link/ script, указывающие на комплект (который всегда будет минимизирован/в комплекте). Вместо этого вы должны получать теги Script/link для отдельных ресурсов в режиме отладки.
Ответ 2
Я только что это произошло в новом проекте ASP.NET MVC. Я установил <compilation debug="true" targetFramework="4.5.1" />
в true в web.config и все еще получал миниатюрный вывод.
Исправить
BundleConfig.cs(в App_Start) имеет строку внизу BundleTable.EnableOptimizations = true;
, которая переопределяет мою настройку web.config....
Удалите строку и/или установите ее в false, и я получил мои сценарии как unminified/unfundled по желанию в среде отладки.
Я рекомендую удалить строку, так как это переопределит web.config. У этого параметра в web.config есть преимущество использования преобразований web.config, чтобы вы могли создавать разные настройки для развертывания в разных средах.
Для получения дополнительной информации об этом см. http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification и прочитайте раздел Контроллинг группировки и минимизации (примерно половина пути к статье).