Hinweis: Aus Gründen der Reputation kann ich mich nicht zu bdeem 's Beitrag . Ich poste stattdessen meine Ergebnisse als Antwort.
Unter bdeem 's Beitrag habe ich Folgendes getan (in dieser Reihenfolge):
1. Ich habe die [project].csproj
Akte. Hinzufügen der <Content Include="" />
Tags zum ItemGroup
für die verschiedenen config
Dateien und machte sie abhängig von der ursprünglichen config
Datei.
Anmerkung: Mit <None Include="" />
funktioniert nicht mit der Transformation.
<!-- App.config Settings -->
<!-- Create App.($Configuration).config files here. -->
<Content Include="App.config" />
<Content Include="App.Debug.config">
<DependentUpon>App.config</DependentUpon>
</Content>
<Content Include="App.Release.config">
<DependentUpon>App.config</DependentUpon>
</Content>
2. Am unteren Ende der [project].csproj
Datei (vor der abschließenden </Project>
Tag), importierte ich die ${MSBuildToolsPath\Microsoft.CSharp.targets
Datei, fügte die UsingTask
um das XML zu transformieren und fügte die Target
zum Kopieren der transformierten App.config
Datei an den Ausgabespeicherort.
Anmerkung: Die Target
überschreibt auch die App.Config
im lokalen Verzeichnis, um sofort zu sehen, wie die Änderungen lokal funktionieren. Die Website Target
verwendet auch die Name="Afterbuild"
Eigenschaft, um sicherzustellen, dass die Konfigurationsdateien transformiert werden können nach werden die ausführbaren Dateien erzeugt. Aus Gründen, die ich nicht verstehe, wenn ich WCF-Endpunkte verwende, wenn ich Name="CoreCompile"
erhalte ich Warnungen zu den Dienstattributen. Name="Afterbuild"
Dies wurde gelöst.
<!-- Task to transform the App.config using the App.($Configuration).config file. -->
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<!-- Only compile the App.config if the App.($Configuration).config file exists. -->
<!-- Make sure to use the AfterBuild name instead of CoreCompile to avoid first time build errors and WCF endpoint errors. -->
<Target Name="AfterBuild" Condition="exists('App.$(Configuration).config')">
<!-- Generate transformed App.config in the intermediate output directory -->
<TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
<!-- Modify the original App.config file with the transformed version. -->
<TransformXml Source="App.config" Destination="App.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>
</Project>
3. Gehen Sie zurück zu Visual Studio und laden Sie die geänderten Dateien erneut.
*4. Manuelles Hinzufügen der `App..configDateien zum Projekt. Dadurch konnten sie unter dem ursprünglichen
App.config` Datei.**
Hinweis: Stellen Sie sicher, dass die App.*.config
Dateien die richtige XML-Struktur haben.
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="myConn" connectionString=""; Initial Catalog=; User ID=; Password=;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
</configuration>
5. Das Projekt wird neu aufgebaut.
0 Stimmen
Ich bin auf den folgenden Artikel gestoßen, der etwas einfacher zu sein scheint, aber ich habe es nicht selbst ausprobiert. fknut.blogspot.com/2009/11/ Außerdem gibt es eine Funktionsanfrage auf MS Connect, für die es sich lohnen könnte, abzustimmen, damit sie in der nächsten SP oder Version durchgängig berücksichtigt wird. connect.microsoft.com/VisualStudio/rückmeldung/details/564414