Kann ich das Installer-Projekt zwingen, die .config-Datei aus der integrierten Lösung anstelle der ursprünglichen zu verwenden?

8

Ich verwende die Lösung zu diese Frage , um Konfigurationsänderungen in App.config in einem Winforms-Projekt anzuwenden. Ich habe auch ein Installer-Projekt für das Projekt, das eine installierbare * .msi-Datei erstellt. Das Problem ist, dass die in den Installationsprogrammen gebündelte Konfigurationsdatei die ursprüngliche, nicht transformierte Konfigurationsdatei ist. Daher erhalten wir die Produktionsverbindungszeichenfolgen im Produktionsinstallationsprogramm nicht, obwohl in der Konfigurationsdatei für das erstellte Winforms-Projekt alle korrekten Transformationen angewendet wurden.

Gibt es eine Möglichkeit, das Installer-Projekt zu zwingen, die Ausgabe von Project Build zu verwenden?

    
recursive 26.07.2011, 17:51
quelle

7 Antworten

8

Da Sie eine Menge Reputation ausgeben, habe ich versucht, mein Bestes zu geben, und einen Teil meiner Zeit damit verbracht, nicht nur das Kopfgeld in die Finger zu bekommen ... sondern ich bekomme auch noch etwas anderes: Wissen! =)

Zunächst einmal: Es ist nicht möglich, das Setup-Projekt mit der Option app.config auf eine andere Datei Primary output zu verweisen. Also wird meine Lösung eine Arbeit um sein. Ich hoffe, Sie finden es in Ihrer Situation nützlich.

Übersicht:

Die Grundidee ist:

  • Entfernen Sie die erzwungene app.config aus dem Setup-Projekt;
  • Fügen Sie eine Datei hinzu, die auf app.config verweist, manuell;
  • Verwenden Sie MSBuild, um in die Datei vdproj zu gelangen, und ändern Sie sie so, dass sie der tatsächlichen Ausgabe der umgewandelten app.config entspricht.

Einige Nachteile sind:

  • Das Setup-Projekt wird nur aktualisiert, wenn das von ihm bereitgestellte Projekt erstellt wird. ahhh ... kein wirklicher Nachteil!
  • Sie brauchen MSBuild 4.0 ... das kann auch umgangen werden!
  • Brauchen Sie eine benutzerdefinierte Aufgabe, genannt FileUpdate ... es ist Open Source und hat Installer.

Lässt uns arbeiten:

1) Gehen Sie zu Ihrem Setup-Projekt und wählen Sie das Objekt Primäre Ausgabe, klicken Sie mit der rechten Maustaste und gehen Sie zu Eigenschaften. Dort finden Sie die Exclude Filter ... fügen Sie einen Filter für *.config hinzu, damit die fest programmierte app.config entfernt wird.

2) Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf Ihr Setup-Projekt - & gt; Hinzufügen - & gt; Datei ... Wählen Sie eine Datei aus, die mit .config endet.

3) Laden Sie MSBuild Community-Aufgaben-Projekt herunter, ich empfehle das msi-Installationsprogramm.

4) Entladen Sie Ihr Projekt (den csproj) und ersetzen Sie den Code von der anderen Frage durch diesen:

Code:

%Vor%

5) Der vorherige Code muss geändert werden, damit er Ihre vdproj-Datei finden kann. Ich habe einen Kommentar in den Code eingefügt, der angibt, wo Sie die Änderung vornehmen müssen.

6) Sei glücklich!

Jedes Mal, wenn Sie Ihr Hauptprojekt erstellen, ändert das MSBuild das Setup-Projekt, so dass es die richtige app.config-Datei verwendet. Es kann Nachteile haben, aber diese Lösung kann poliert werden und besser werden. Wenn Sie einen Kommentar hinterlassen müssen, und ich werde versuchen, so schnell wie möglich zu antworten.

Ressourcen, die ich verwendet habe

MSBuild 4.0 ist erforderlich, da ich die Replace-Funktion von String verwenden muss, um einzelnes "\" im Pfad zu "\" zu ersetzen. Sehen MSBuild-Eigenschaftsfunktionen für Details zur Verwendung von Funktionen in MSBuild .

Ich habe erfahren, dass FileUpdate Task in dieser anderen Frage. Das offizielle Projekt ist MSBuild Community-Aufgaben-Projekt .

Diese beiden Themen waren wichtig für meine Ergebnisse:

Versuchen, konfigurationsspezifische app.config-Dateien in ein Setup-Projekt aufzunehmen

Probleme mit der Einrichtung Projekt - bin ich dick?

    
Miguel Angelo 02.08.2011 07:15
quelle
5

Eine andere Lösung, die ich gefunden habe, ist nicht, die Transformationen zu verwenden, sondern nur eine separate Konfigurationsdatei, z. app.Release.config. Dann füge diese Zeile zu deiner csproj-Datei hinzu.

%Vor%

Dadurch wird das Bereitstellungsprojekt gezwungen, beim Packen die richtige Konfigurationsdatei zu verwenden.

    
Alec 18.10.2011 18:09
quelle
4

Ich habe dies auf eine andere Art und Weise ohne externe Tools erreicht:

Ich habe ein Post-Build-Ereignis hinzugefügt, das die Zieldateien in ein 'neutrales' Verzeichnis (das Stammverzeichnis des / bin-Ordners im Projekt) kopiert und dann diese Datei zu .vdproj hinzugefügt hat. Das Bereitstellungsprojekt greift nun unabhängig von der neuesten Version auf:

Nach dem Build-Befehl:

%Vor%

Dies funktionierte für das, was ich brauchte, ohne irgendwelche externen Tools, und funktioniert gut mit SlowCheetah-Transformationen.

    
Ehryk 23.10.2014 05:47
quelle
2

Ich habe die besten der folgenden Antworten kombiniert, um eine vollständig funktionierende Lösung zu erhalten, ohne überhaupt irgendwelche externen Tools zu verwenden:

1. Konfigurieren Sie App.Config-Transformationen

Quelle: Ссылка

Kurz gesagt:

Fügen Sie für jede Buildkonfiguration manuell zusätzliche .config-Dateien hinzu, und bearbeiten Sie die Rohprojektdatei, um sie ähnlich wie folgt einzufügen:

%Vor%

Fügen Sie anschließend das folgende XML am Ende der Projektdatei ein, unmittelbar vor dem schließenden </project> -Tag:

%Vor%

Bearbeiten Sie abschließend die zusätzlichen .config-Dateien, um die entsprechenden Transformationen für jede Build-Konfiguration:

%Vor%

2. Fügen Sie die entsprechende .config in das Setup-Projekt

ein

Fügen Sie zunächst im postbuild-Ereignis Ihres Hauptprojekts einen Befehl hinzu, um die entsprechende transformierte .config-Datei an einen neutralen Speicherort zu verschieben (z. B. das Hauptverzeichnis bin\ ):

%Vor%

(Quelle: Ссылка )

Öffnen Sie das Setup-Projekt und klicken Sie auf den Knoten "Primäre Ausgabe ...", um das Eigenschaftenfenster anzuzeigen. Fügen Sie dort ExludeFilter "*.config" hinzu, um die Standarddatei (nicht transformiert) .config auszuschließen.

(Quelle: Ссылка )

Fügen Sie abschließend die transformierte .config-Datei (vom postbuild-Ereignis) zum Setup-Projekt hinzu (Add & gt; Datei).

Fertig.

Sie können Buildkonfigurationen und entsprechende Konfigurationsumwandlungen jetzt frei hinzufügen, und Ihr Installationsprojekt enthält immer die entsprechende .config für die aktive Konfiguration.

    
marsze 20.06.2017 07:09
quelle
1

Ausgehend von Alecs Antwort folgt hier ein ähnliches Element, das Sie zusammen mit den Transformationen verwenden können und dennoch den vollen Nutzen daraus ziehen können:

%Vor%

Auf diese Weise können Sie die SlowCheetah-Transformationen oder die integrierten Transformatoren verwenden, um Ihre .config-Datei zu transformieren und dann in Ihr Visual Studio-Bereitstellungsprojekt (oder andere) zu gehen und den Inhalt aus dem betroffenen Projekt in Ihr Add - & gt; Project Output ... Seite leicht, mit minimalen Änderungen.

    
Alex Marshall 01.05.2013 13:11
quelle
1

Keine der obigen Lösungen oder irgendwelche Artikel funktionierten für mich im Deployment / Setup-Projekt. Habe viele Tage gebraucht, um die richtige Lösung zu finden. Schließlich hat dieser Ansatz für mich funktioniert.

Vorbedingungen

Ich habe das Dienstprogramm cct.exe verwendet, um die Datei explizit zu transformieren. Sie können von hier herunterladen Ссылка

Ich habe das benutzerdefinierte Installationsprogramm im Installationsprojekt verwendet, um Installationsereignisse zu erfassen.

Befolgen Sie diese Schritte, um eine App-Konfigurationsumwandlung zu erreichen.

1) Fügen Sie Ihrem Projekt die gewünschten Konfigurationsdateien hinzu und ändern Sie Ihre .csproj-Datei wie diese

%Vor%

Ich habe sie als Inhalt hinzugefügt, damit sie in das Ausgabeverzeichnis kopiert werden können.

2) Fügen Sie cct.exe zu Ihrem heruntergeladenen Projekt hinzu.

3) Fügen Sie Ihrem Projekt benutzerdefiniertes Installationsprogramm hinzu, das wie folgt aussehen sollte

%Vor%

Hier verwende ich zwei Event-Handler CustomInstaller_AfterInstall , in denen ich die korrekte Konfigurationsdatei lade und transformiere.  In MyInstaller_Committed lösche ich Transformationsdateien, die wir nicht auf dem Client-Rechner benötigen, nachdem wir die Anwendung angewendet haben. Ich verzichte auch transformierte Datei, weil cct einfach transformiert Elemente wurden hässlich ausgerichtet.

4) Öffnen Sie Ihr Setup-Projekt und fügen Sie eine Projektinhaltsdatei hinzu, damit das Konfigurationsprogramm Konfigurationsdateien wie app.uat.config, app.live.config usw. in den Client-Rechner kopieren kann.

Im vorherigen Schritt wird dieses Snippet alle verfügbaren Konfigurationsdateien laden, aber wir brauchen die richtige Transformationsdatei

%Vor%

Dafür habe ich den UI-Dialog im Setup-Projekt hinzugefügt, um die aktuelle Konfiguration zu erhalten. Der Dialog bietet Optionen für den Benutzer zur Auswahl von Umgebungen wie "Live", "UAT", "Test" usw. Übergeben Sie die ausgewählte Umgebung nun an Ihr benutzerdefiniertes Installationsprogramm und filtern Sie sie.

Es wird ein langwieriger Artikel, wenn ich erkläre, wie man einen Dialog hinzufügt, wie man Params usw. einrichtet, also bitte googlen sie. Die Idee besteht jedoch darin, die vom Benutzer ausgewählte Umgebung zu transformieren. Der Vorteil dieses Ansatzes ist, dass Sie dieselbe Setup-Datei für jede Umgebung verwenden können.

Hier ist die Zusammenfassung:

Fügen Sie Konfigurationsdateien hinzu

Fügen Sie eine cct-exe-Datei

hinzu

Benutzerdefiniertes Installationsprogramm hinzufügen

Wenden Sie die Umwandlung in exe.config unter dem Ereignis nach der Installation an

Löschen Sie die Transformationsdateien vom Clientcomputer

Ändern Sie das Setup-Projekt so, dass

%Vor%

Die Lösung sieht möglicherweise langwierig aus, hat aber keine andere Wahl, da MSI immer app.config kopiert und sich nicht um Projekterstellungsereignisse und -umwandlungen kümmert. slowcheetah funktioniert nur mit clickonce nicht Setup-Projekt

    
kinnu 22.04.2014 11:18
quelle
0

Die Frage ist alt, aber das Folgende könnte noch vielen Leuten da draußen helfen.

Ich würde einfach Wix WiFile.exe verwenden, um die betreffende Datei in der msi auf diese Weise zu ersetzen (aus diesem Grund rufen wir an Ihre msi yourPackage.msi ):

Schritt 1. Führen Sie von der Eingabeaufforderung aus: WiFile.exe "yourPackage.msi" / x "app.exe.config." Das obige wird die "falsche" Datei app.exe.config aus dem MSI extrahieren und es in das gleiche Verzeichnis wie Ihre MSI ;

stellen

Schritt 2. Platzieren Sie die neue (prod) Konfigurationsdatei (muss den gleichen Namen haben wie die extrahierte Datei: app.exe.config) am selben Ort wie Ihre MSI; Dies bedeutet, dass Sie die Datei app.exe.config, die gerade in Schritt 1 oben extrahiert wurde, mit Ihrer neuen (Produktionskonfigurationsdatei) ;

überschreiben

Schritt 3. Führen Sie von der Eingabeaufforderung aus: WiFile.exe "yourPackage.msi" / u "app.exe.config."

DAS IST ALLES!

Dies kann in wenigen Sekunden geschehen. Sie können die Aufgabe beispielsweise automatisieren, indem Sie sie als Batch oder sonst ausführen.

Nachdem Sie Schritt 3 oben ausgeführt haben, enthält Ihr MSI die neue Konfigurationsdatei, die nun bei der Ausführung des Setups auf Ihren Clients installiert wird.

    
zinczinc 14.08.2017 04:46
quelle