Как установить 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, пытаясь применить приведенную выше команду, но это не удается.