Wypróbowałem kilka rozwiązań i oto najprostsze, jakie osobiście znalazłem.
Dan zauważył w komentarzach, że oryginalny post należy do Olega Sycha - dzięki, Oleg!
Oto instrukcje:
1. Dodaj plik XML dla każdej konfiguracji do projektu.
Zazwyczaj będziesz mieć Debug
i Release
konfiguracje, więc nazwij swoje pliki App.Debug.config
i App.Release.config
. W moim projekcie stworzyłem konfigurację dla każdego rodzaju środowiska, więc możesz z tym eksperymentować.
2. Zwolnij projekt i otwórz plik .csproj do edycji
Visual Studio umożliwia edytowanie plików .csproj bezpośrednio w edytorze - wystarczy najpierw rozładować projekt. Następnie kliknij go prawym przyciskiem myszy i wybierz opcję Edycja <Nazwa projektu> .csproj .
3. Powiąż pliki aplikacji. *. Config z głównym plikiem App.config
Znajdź sekcję pliku projektu, która zawiera wszystkie App.config
i App.*.config
odniesienia. Zauważysz, że ich działania kompilacji są ustawione na None
:
<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />
Najpierw ustaw akcję budowania dla wszystkich Content
.
Następnie uzależnij wszystkie pliki specyficzne od konfiguracji od głównego, App.config
aby program Visual Studio grupował je tak, jak robi to pliki projektanta i kodu.
Zamień XML powyżej na poniższy:
<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. Aktywuj magię transformacji (konieczne tylko dla wersji Visual Studio wcześniejszych niż VS2017 )
Na końcu pliku po
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
i przed finałem
</Project>
wstaw następujący kod 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>
Teraz możesz ponownie załadować projekt, zbudować go i cieszyć się App.config
transformacjami!
Do Twojej wiadomości
Upewnij się, że twoje App.*.config
pliki mają odpowiednią konfigurację:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--magic transformations here-->
</configuration>