Web.config не трансформируется при отладке кода

У меня есть основной файл Web.config, а под ним есть файлы Web.Test.config, Web.Development.Config и т.д.

Когда я просматриваю преобразование через SlowCheetah в тестовой конфигурации, кажется, что оно правильно преобразует значения.

Когда я переключаю среду сборки с «Разработка» на «Тестирование» и пытаюсь отлаживать приложение, приложение запускается с любыми значениями в основном файле Web.config (т. е. оно ничего не преобразует).

Как заставить среду сборки выбирать правильную конфигурацию при отладке, а не всегда использовать базовый файл Web.config? Это возможно?


person mameesh    schedule 22.02.2016    source источник


Ответы (2)


Вы можете преобразовать Web.config при сборке. Добавьте эту цель в файл *.csproj:

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

Сохраните исходную конфигурацию в Web.Base.config. Достаточно включить преобразование, и оно работает для любого конфигурационного файла XML. SlowCheetah больше не нужен.

http://sebnilsson.com/a5410281/asp-net-transform-web-config-with-debug-release-on-build/

person Ilya Chumakov    schedule 22.02.2016
comment
Это самое простое решение, я так сделал, и оно прекрасно работает. Но... всегда есть но... Я всегда получаю сообщение об ошибке "Отладка не включена", когда она включена в Web.Base.config, но мой Web.config в первый раз пуст. Если выбрать «Изменить файл Web.config», чтобы включить отладку, и нажать «ОК», он продолжит работать нормально. Если у Web.config последняя запущенная версия с включенной отладкой, она работает нормально. Похоже, перед трансформацией проверяется отладка. - person Fernando Torres; 25.10.2017
comment
Это решение работает нормально. Но еще один недостаток заключается в том, что все, что Visual Studio/NuGet/etc. изменения в файле web.config необходимо вручную перенести в файл Web.Base.config. - person Simon Lang; 01.11.2017
comment
Для всех, кто работает с несколькими версиями VS, замена моего жестко закодированного значения на $(VisualStudioVersion) сработала для меня. - person Brandon Johnson; 12.07.2018
comment
не нужно использовать базу, если вы не хотите ‹Target Name=BeforeBuild› ‹TransformXml Source=Web.config Transform=Web.$(Configuration).config Destination=Web.config /› ‹/Target› - person Tyler; 06.06.2019
comment
по предоставленной ссылке это должно быть обновлено, чтобы исправить проблему двойного преобразования. ОБНОВЛЕНИЕ: Из напоминания в комментариях я понял, что у меня также есть проблема с тем, что Visual Studio дважды преобразовывает XML при публикации проекта. Решение этой проблемы состоит в том, чтобы добавить условие к тегу Target следующим образом: ‹Target Name=BeforeBuild Condition='$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''› - person Heriberto Lugo; 21.01.2021

Преобразования XML будут применяться только при публикации веб-приложений, а не во время сборки.

Этот сообщение в блоге подробно описывает обходной путь с использованием параметров сборки.

person Christopher Dunn    schedule 22.02.2016
comment
Я объединил вышеуказанное решение Target BeforeBuild и это. Используя <DependentUpon>Web.Base.config</DependentUpon>. Спасибо! - person mike123; 20.01.2017
comment
@ mike123 - Не могли бы вы более подробно объяснить, как это выглядит? Выглядит интересно. Мне удалось заставить это работать с SlowCheetah, используя их пакет nuget для файлов web.config. - person arviman; 28.02.2017
comment
@arviman файл csproj нуждался в изменениях в двух местах `... ‹None Include=Web.Base.config /› ‹Content Include=Web.config /› ‹None Include=Web.PROD.config› ‹DependentUpon›Web.config ‹/DependentUpon› ‹/None› ... ‹Импортировать проект=$(SlowCheetahTargets) Condition=Exists('$(SlowCheetahTargets)') Label=SlowCheetah /› ‹Target Name=BeforeBuild Condition='$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''› ‹TransformXml Source=Web.Base.config Transform=Web.$(Configuration).config Destination=Web.config /› ‹/Target› ‹/Project›` - person mike123; 28.02.2017