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?
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:
app.config
aus dem Setup-Projekt; app.config
verweist, manuell; vdproj
zu gelangen, und ändern Sie sie so, dass sie der tatsächlichen Ausgabe der umgewandelten app.config entspricht. Einige Nachteile sind:
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
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.
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.
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:
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\
):
(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.
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.
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
hinzuBenutzerdefiniertes 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
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 ;
stellenSchritt 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) ;
überschreibenSchritt 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.
Tags und Links visual-studio-2010 winforms installer web-config-transform