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