Ho provato diverse soluzioni ed ecco la più semplice che ho trovato personalmente.
Dan ha sottolineato nei commenti che il post originale appartiene a Oleg Sych - grazie, Oleg!
Ecco le istruzioni:
1. Aggiungere un file XML per ogni configurazione al progetto.
In genere avrai Debuge Releaseconfigurazioni quindi dai un nome ai tuoi file App.Debug.confige App.Release.config. Nel mio progetto, ho creato una configurazione per ogni tipo di ambiente, quindi potresti voler sperimentare.
2. Scaricare il progetto e aprire il file .csproj per la modifica
Visual Studio ti consente di modificare i file .csproj direttamente nell'editor: devi solo scaricare prima il progetto. Quindi fare clic con il tasto destro su di esso e selezionare Modifica <nome progetto> .csproj .
3. Associa i file App. *. Config a App.config principale
Trova la sezione del file di progetto che contiene tutto App.confige App.*.configriferimenti. Noterai che le loro azioni di costruzione sono impostate su None:
<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />
Innanzitutto, imposta l'azione di compilazione per tutti Content.
Quindi, fai in modo che tutti i file specifici della configurazione dipendano dal principale in App.configmodo che Visual Studio li raggruppi come fa con i file designer e code-behind.
Sostituisci XML sopra con quello sotto:
<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. Attiva trasformazioni magiche (necessario solo per le versioni di Visual Studio precedenti a VS2017 )
Alla fine del file dopo
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
e prima della finale
</Project>
inserisci il seguente 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>
Ora puoi ricaricare il progetto, costruirlo e goderti le App.configtrasformazioni!
FYI
Assicurati che i tuoi App.*.configfile abbiano la giusta configurazione in questo modo:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--magic transformations here-->
</configuration>