Как установить debug false для режима выпуска
У меня есть этот файл web.config с параметром компиляции, указанным ниже
Web.config
<configuration>
...
<system.web>
<compilation debug="true" targetFramework="4.5" />
...
</system.web>
</configuration>
И вот то, что Visual Studio по умолчанию запускает для режима выпуска.
Web.Release.config
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
Я использую это для проекта MVC4. Основываясь на этом руководстве, я ожидал, что мини-версии js и css будут обслуживаться, когда приложение будет запущено в режиме выпуска. Но это, похоже, не работает, и обслуживаются неминифицированные версии js и css. С другой стороны, если я явно устанавливаю debug на false в web.config, то минимальные версии обслуживаются правильно.
Кажется, что тег компиляции Transform проблема при запуске приложения в режиме выпуска, но я не понимаю, что неправильно с тем же в Web.Release.config.
Вкратце, я не могу работать с подключением и минимизацией, запустив приложение в режиме выпуска.
Ответы
Ответ 1
Преобразования Web.config, как они определены в Web.Release.config, выполняются только при развертывании/публикации проекта для соответствующей конфигурации.
Простое изменение активной конфигурации в Visual Studio для выпуска и запуска приложения не запускает преобразования. Поэтому web.config остается без изменений. Такое поведение оправдано тем, что веб-приложение запускается из каталога проекта, в котором содержится исходный файл web.config. Если Visual Studio преобразует web.consign, ваш исходный web.config будет изменен.
Если вы еще не создали профиль развертывания, вы можете опубликовать свое приложение в файловой системе, чтобы проверить его поведение. Выберите Release в качестве конфигурации для запуска развертывания. Преобразования должны быть выполнены как ожидалось.
Ответ 2
Если вы хотите протестировать свой набор и настройку .NET, которые были настроены в вашем файле Global.asax, вы также можете использовать нотацию предварительной компиляции... например
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
При этом вашему приложению не потребуется запускать преобразование в операции сборки и будет работать так же, как вы хотите.
Ответ 3
Мой ответ может быть запоздалым, однако это то, что сработало со мной:
Я изменил строку:
<compilation xdt:Transform="RemoveAttributes(debug)" />
to:
<compilation xdt:Transform="Replace" debug="false" targetFramework="4.5" />
это в основном сделало трюк, так как я думаю, что оптимизатор ищет значение Debug, которое будет присутствовать, и == "false".
Надеемся, что это поможет людям, которые не хотят управлять этим кодом.
Ответ 4
Возможно, улучшение для Omar.Alani ответ:
В преобразовании Release замените строку:
<compilation xdt:Transform="RemoveAttributes(debug)" />
со следующим:
<compilation debug="false" xdt:Transform="SetAttributes" />
Ответ 5
Удаление атрибута отладки является достаточным RemoveAttributes (debug). Это будет работать подобно debug = false.
Ответ 6
compilation debug="false" xdt:Transform="SetAttributes"
пригодится, когда вы активируете преобразования XML во время развертывания Azure, чтобы сделать преобразования конфигурации специфичными для целевой среды.
При проверке преобразования XML во время развертывания Azure выполняется следующая последовательность действий:
- Примените web.release.config к web.config
- Примените web.stageName.config к измененному web.config.
Но web.release.config
уже был применен к web.base.config
, так что если
compilation xdt:Transform="RemoveAttributes(debug)"
используется в файле web.release.config
, в файле web.config атрибут отладки уже был удален во время компиляции, и при повторном развертывании он преобразуется с помощью web.release.config
, пытаясь применить приведенную выше команду, но это не удается.