Я попробовал несколько решений, и вот самое простое, что я лично нашел.
Дэн указал в комментариях, что оригинальный пост принадлежит Олегу Сычу - спасибо, Олег!
Вот инструкции:
1. Добавьте файл XML для каждой конфигурации в проект.
Как правило, вы будете иметь Debug
и Release
конфигурации, так что назовите ваши файлы App.Debug.config
и App.Release.config
. В моем проекте я создал конфигурацию для каждого типа среды, поэтому вы можете поэкспериментировать с этим.
2. Выгрузите проект и откройте файл .csproj для редактирования.
Visual Studio позволяет редактировать файлы .csproj прямо в редакторе - сначала нужно просто выгрузить проект. Затем щелкните по нему правой кнопкой мыши и выберите « Изменить <ProjectName> .csproj» .
3. Привязать файлы конфигурации App. *. К основному файлу App.config.
Найдите раздел файла проекта, который содержит все App.config
и App.*.config
ссылки. Вы заметите, что их действия по сборке установлены на None
:
<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />
Во-первых, установите действие сборки для всех из них Content
.
Затем сделайте все зависящие от конфигурации файлы зависимыми от основных, App.config
чтобы Visual Studio сгруппировала их, как это делает дизайнер и файлы с выделенным кодом.
Замените XML выше на приведенный ниже:
<Content Include="App.config" />
<Content Include="App.Debug.config" >
<DependentUpon>App.config</DependentUpon>
</Content>
<Content Include="App.Release.config" >
<DependentUpon>App.config</DependentUpon>
</Content>
4. Активируйте магию преобразований (необходимо только для версий Visual Studio до VS2017 )
В конце файла после
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
и до финала
</Project>
вставьте следующий XML:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="CoreCompile" Condition="exists('app.$(Configuration).config')">
<!-- Generate transformed app config in the intermediate directory -->
<TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
<!-- Force build process to use the transformed configuration file from now on. -->
<ItemGroup>
<AppConfigWithTargetPath Remove="app.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
Теперь вы можете перезагрузить проект, собрать его и наслаждаться App.config
трансформациями!
FYI
Убедитесь, что ваши App.*.config
файлы правильно настроены так:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--magic transformations here-->
</configuration>