589 Stimmen

App.Config Transformation für Projekte, die keine Webprojekte in Visual Studio sind?

Für Visual Studio 2010 Web-basierte Anwendung haben wir Config Transformation Funktionen, durch die wir mehrere Konfigurationsdateien für verschiedene Umgebungen pflegen können. Die gleiche Funktion ist jedoch nicht für App.Config-Dateien für Windows Services/WinForms oder Konsolenanwendungen verfügbar.

Es gibt eine Umgehungslösung, die hier vorgeschlagen wird: Anwendung der XDT-Magie auf App.Config .

Dies ist jedoch nicht ganz einfach und erfordert eine Reihe von Schritten. Gibt es eine einfachere Möglichkeit, dasselbe für app.config-Dateien zu erreichen?

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

30voto

Tevin Punkte 1374

Sie können für jede Konfiguration eine eigene Konfigurationsdatei verwenden, z. B. app.Debug.config, app.Release.config, und dann die Konfigurationsvariable in Ihrer Projektdatei verwenden:

<PropertyGroup>
    <AppConfig>App.$(Configuration).config</AppConfig>
</PropertyGroup>

Dadurch wird die richtige Datei ProjectName.exe.config erstellt, je nachdem, in welcher Konfiguration Sie bauen.

0 Stimmen

Danke, ich habe nicht genau Ihr Beispiel verwendet, um das Problem zu lösen, das ich hatte, aber Ihr Beispiel hat mich zum Nachdenken gebracht und mich zu einer anderen, sehr ähnlichen Lösung geführt, bei der die Aufgabe Kopieren verwendet wurde.

0 Stimmen

Versucht dies unter VS 2015 Community RC und es baut, aber dann ignoriert den Inhalt der app.*.config ich hinzugefügt haben.

14voto

Golan Avraham Punkte 330

Ich habe eine nette Erweiterung geschrieben, um die app.config-Transformation zu automatisieren, wie sie in Web Application Project eingebaut ist Konfiguration Transformieren

Der größte Vorteil dieser Erweiterung ist, dass Sie sie nicht auf allen Build-Maschinen installieren müssen

1 Stimmen

Eine sehr nützliche Erweiterung, insbesondere jetzt, da Slow Cheetah in den Wartungsmodus übergeht und in Zukunft möglicherweise nicht mehr unterstützt wird.

0 Stimmen

Ja, die Leute sollten aufhören, Cheetah als Lösung für dieses Problem zu sehen, wenn diese Funktionalität jetzt von der transformxml msbuild Aufgabe unterstützt wird. Ein sw-Architekt in meinem Team hat slow cheetah in übereifriger Weise in unser Projekt eingeführt und Debug-, Stage- und Release-Transformationen aller unserer Configs erstellt, von denen die meisten keine Transformation benötigten. Unnötig zu sagen, dass ich in dem Moment, in dem er ging, slow cheetah herausgenommen habe und wir jetzt nur noch eine einzige transformxml-Aufgabe in der web.config verwenden. Ahhhhh, Einfachheit. Ich will nicht sagen, dass slow cheetah nicht auch seine Zeit und seinen Platz hatte.

9voto

Agnel Amodia Punkte 715

Installieren Sie "Configuration Transform Tool" in Visual Studio vom Marketplace und starten Sie VS neu. Sie werden in der Lage sein, die Menüvorschau auch für app.config zu transformieren.

https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform

1 Stimmen

Das funktioniert perfekt und erfordert nur sehr wenig Aufwand oder Nachdenken. Sehr geschätzt. Danke. (die "Vorschau-Transformation" dosn ' t Arbeit, aber die "Transformationen hinzufügen" funktioniert perfekt ohne Problem auf VS 2017). Scheint auch oft Updates zu bekommen.

1 Stimmen

Vielen Dank für die Lösung, die hinter den Kulissen genau das tut, was Dan Abramov oben erklärt hat, ohne sich die Hände schmutzig zu machen

0 Stimmen

Dies ist die ultimative Lösung. Die Vorschau scheint gut zu funktionieren mit VS 2019.

5voto

Yuri Makassiouk Punkte 405

Nur eine kleine Verbesserung der Lösung, die jetzt überall zu lesen ist:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  • das heißt, es sei denn, Sie haben vor, für immer bei Ihrer aktuellen VS-Version zu bleiben

0 Stimmen

Können Sie bitte Ihre Antwort ein wenig erläutern oder Quellen zur Erklärung angeben?

4 Stimmen

Sieht nicht aus wie $(VisualStudioVersion) gesetzt ist, wenn MSBuild direkt verwendet wird.

0 Stimmen

Dies sollte ein Kommentar sein zu stackoverflow.com/a/5109530/2003763 (Ich habe soeben die gleiche Information als Kommentar hinzugefügt)

4voto

Waggles Punkte 244

Also habe ich einen etwas anderen Ansatz gewählt. Ich folgte Dans Schritten bis Schritt 3, fügte aber eine weitere Datei hinzu: App.Base.Config. Diese Datei enthält die Konfigurationseinstellungen, die in jeder generierten App.Config enthalten sein sollen. Dann verwende ich BeforeBuild (mit Yuris Zusatz zu TransformXml), um die aktuelle Konfiguration mit der Base.Config in die App.Config zu transformieren. Der Build-Prozess verwendet dann die transformierte App.config wie gewohnt. Ein Ärgernis ist jedoch, dass man die sich ständig ändernde App.config anschließend aus der Versionskontrolle ausschließen möchte, aber die anderen Konfigurationsdateien sind nun von ihr abhängig.

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="BeforeBuild" Condition="exists('app.$(Configuration).config')">
    <TransformXml Source="App.Base.config" Transform="App.$(Configuration).config" Destination="App.config" />
  </Target>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X