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 Debug
e Release
configurazioni quindi dai un nome ai tuoi file App.Debug.config
e 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.config
e App.*.config
riferimenti. 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.config
modo 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.config
trasformazioni!
FYI
Assicurati che i tuoi App.*.config
file 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>