Общие сведения о преобразованиях ASP.NET Web.config — Web.Debug.config

Я боролся с этим в течение часа и не могу найти простого объяснения или, по крайней мере, какой-либо документации Microsoft, в которой говорится об этом.

Я хочу понять поведение следующих файлов:

  • Web.config
  • Web.Debug.config
  • Web.Release.config
  • Web.Staging.config (я создал это, щелкнув правой кнопкой мыши Web.config -> Добавить преобразование конфигурации)

Я добавил следующий appSetting в файл Web.config:

<configuration>
  ..
  <appSettings>
    <add key="DevDisplayPanel" value="default value" />
  </appSettings>
  ..
</configuration>

В моем Web.Debug.config я изменил DevDisplayPanel на это:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="DevDisplayPanel" 
         xdt:Transform="Replace" 
         xdt:Locator="Match(key)" 
         value="Debug mode" />
  </appSettings>
</configuration>

Я отобразил элемент appSettings следующим образом:

ViewBag.Test = System.Configuration.ConfigurationManager.AppSettings["DevDisplayPanel"];

Я понял, что если я запущу Debug -> Start Debugging в Visual Studio, этот параметр DevDisplayPanel будет прочитан из Web.Debug.config. Я не могу найти документацию Microsoft, в которой говорится об этом.

Я попытался запустить свое веб-приложение, используя конфигурацию решения Debug, Release и Staging, но все они показывают значение DevDisplayPanel из файла Web.config.

Где вступают в игру файлы Web.Debug|Release|MyConfiguraton.config. Что я упустил, и, что самое главное, это поведение должно быть выделено жирным шрифтом где-то в документах!!


person broadband    schedule 17.10.2018    source источник
comment
Что я делал в прошлом для отладки различных конфигураций, так это токенизировал различные файлы конфигурации, помещая __ somevalue __ вместо фактического значения. Затем создайте файл xml (или ваш выбор) для каждой конфигурации сборки с реальными значениями. Простой .exe, заменяющий токены, запускается на этапе после сборки и заменяет файл конфигурации в папке bin. Это не так плохо, как может показаться.   -  person Crowcoder    schedule 17.10.2018


Ответы (2)


Преобразования Web.config связаны с публикацией вашего проекта в заданной конфигурации.

При отладке в Visual Studio всегда используется простой файл web.config, независимо от конфигурации.

Вам нужно выбрать Build => Publish из опций меню, а затем запустить опубликованное приложение.

person ste-fu    schedule 17.10.2018
comment
Вы правы, спасибо. Но эта функция не так проста в использовании. Я делаю только больше путаницы вместо простого использования Visual Studio. Я еще не нашел документ, в котором говорится, что отладка из Visual Studio игнорирует файлы Web.xxx.config. - person broadband; 17.10.2018
comment
Дело в том, что процесс сборки ms отличается и не нацелен на файлы pubxml. согласен, не интуитивно - person ste-fu; 17.10.2018

Кредит https://gist.github.com/EdCharbeneau/9135216

Вы можете добавить что-то подобное в конец вашего .csproj.

 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" />
  <Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
  </Target>

v16 — визуальная студия 2019 года.

Обратите внимание, что это перезапишет исходный файл web.config с любыми изменениями преобразований. На самом деле я обсуждаю со своей командой, как лучше всего сделать это в нашем проекте, и одно из решений — поместить все ваши «стандартные» настройки, с которыми вы отлаживаете свой проект, но в файле web.debug.config. И относитесь к этому как к вашему «базовому» web.config.

Использование этого фрагмента имеет дополнительное преимущество работы на вашем сервере сборки перед развертыванием.

person TheDudeAbides    schedule 03.06.2020