Я попробовал несколько решений, и вот самое простое, что я лично нашел.
Дан указал в комментариях, что исходное сообщение принадлежит Олег Сыч - спасибо, Олег!
Вот инструкции:
1.Добавьте XML-файл для каждой конфигурации в проект.
Обычно у вас будут конфигурации Debug
и Release
, поэтому назовите ваши файлы App.Debug.config
и App.Release.config
.В моем проекте я создал конфигурацию для каждого типа среды, поэтому вы можете поэкспериментировать с этим.
2.Выгрузите проект и откройте файл .csproj для редактирования
Visual Studio позволяет редактировать файлы .csproj прямо в редакторе - сначала нужно просто выгрузить проект.Затем щелкните его правой кнопкой мыши и выберите Изменить .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.Активируйте магию преобразований
В конце файла после
<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>