Azure Worker-Rollenkonfigurationsdateitransformationen

8

Ich habe eine neue Worker-Rolle eingerichtet und einige neue Config-Transformationen dafür über SlowCheetah eingerichtet. Wenn ich das Projekt mit einer der ausgewählten neuen Konfigurationen erstelle, sehe ich tatsächlich, dass der Ordner configs unterhalb des Ordners \ bin wie erwartet (zB \ bin \ Production) erstellt wird.

Wenn ich einen Cloud-Service für die Bereitstellung mit einer der neuen Konfigurationen paketiere, werden meine Web-Projekte entsprechend konfiguriert, aber meine Worker-Rolle (die nur eine Bibliothek ist) funktioniert nicht, obwohl ich unter dem \ bin-Ordner eine aktualisierte sehe \ bin \ Produktion.

Es scheint, dass das azure-Tool für die Verpackung die für die Worker-Rollenbibliothek festgelegte Konfiguration ignoriert. Wie bekomme ich es die Konfigurationsdatei aus der entsprechenden Konfiguration auszuwählen?

    
James Alexander 11.12.2012, 20:33
quelle

3 Antworten

9

Ja, Sie können das - und es ist sogar sehr einfach, wenn Sie wissen, wie.
App.config wird nicht by design umgewandelt, aber zum Glück hat das Azure-Team den Build / Deploy-Prozess für diese Art von Szenarien sehr erweiterbar gemacht. Was Sie tun müssen, ist einigermaßen gut dokumentiert, allerdings auf eine sehr umständliche Art und Weise und die meisten Artikel gehen davon aus, dass Sie bereits mit MSBuild-Skripten und ähnlichem vertraut sind.

Im Folgenden finden Sie die Zeilen, die Sie in Ihr Projekt einfügen müssen, um dieses Just Work zu erstellen. Das sollte nicht länger als fünf Minuten dauern. Bitte beachten Sie, dass dies kein Hack ist - der gesamte Azure-Bereitstellungsprozess unterstützt solche Dinge.

Wenn Sie mehr wissen möchten, finden Sie unten einige Links zu verwandten Artikeln.

Einige konzeptionelle Punkte

  1. Der empfohlene Weg, um dies in Azure zu erreichen, besteht darin, nicht Web.config und App.config zu verwenden, sondern den CloudConfigurationManager zu verwenden und Rolleneinstellungen zu verwenden. Manchmal ist das jedoch nicht die richtige Antwort, in der Regel aufgrund von integrierten oder Drittanbieter-Komponenten, die * .config-Einstellungen (SMTP, WCF, Elmah usw.) erfordern.
  2. Web Config-Umwandlungen wurden entwickelt, um nur die Datei web.config zu transformieren. Dies bedeutet, dass app.config nicht von design umgewandelt wird.
  3. Web Config-Transformationen sind nur für das Publishing vorgesehen. Wenn Sie also lokal im Cloud-Emulator arbeiten, wird Ihre Web.config nicht umgewandelt.

Wir können dies lösen, indem wir uns in den Build-Prozess für das Cloud-Projekt einklinken. Wenn Sie das Projekt in Azure bereitstellen, wird das Cloud-Projekt mithilfe eines Build-Prozesses erstellt, in den Sie einhaken können. Kurz gesagt, das Cloud-Projekt erstellt die Web- und Worker-Rollen und platziert sie unter dem Obj-Ordner in Ihrem Cloud-Projekt. Es führt dann einen Prozess aus, der das Ganze im Wesentlichen aufreißt und schließlich das Ergebnis in den Ordner "Bin" legt. Von dort werden die "Zip" -Datei und eine Konfigurationsdatei nach Azure hochgeladen.

Die Lösung

Bearbeiten Sie Ihre Cloud.csproj-Datei manuell (wenn Sie dies in Visual Studio tun, müssen Sie zuerst das Projekt entladen). Fügen Sie dann dieses Recht über dem schließenden </project> -Tag hinzu:

%Vor%

Notizen

  • Da gibt es ein paar hart codierte Pfade, die du ändern musst. Ich bin sicher, dass es einen Weg gibt, sie weich zu machen, aber das erfordert mehr MSBuild Fähigkeiten als ich.
  • Die Umwandlung wird tatsächlich ausgeführt , wenn Sie sie auf Ihrem lokalen Cloud Emulator bereitstellen, aber sie wird nicht verwendet . Daher stimmt das Ergebnis mit dem Verhalten von Web.config überein, das ebenfalls nicht transformiert wird. Wenn Ihre Umwandlung jedoch fehlschlägt, erhalten Sie einen Erstellungsfehler, selbst wenn Sie nur im Emulator ausgeführt werden.
  • Siehe auch Diese andere SO-Frage
  • An in -tiefe Erkundung
  • Tom Hollanders hochgelegener Artikel über die Bereitstellung direkt von MSBuild
Frans 19.01.2013 11:29
quelle
6

Ich finde @Frans zu kompliziert, und unten ist der Code, den ich im internet . Wenn Sie bereits Ihre app.config-Umwandlung eingerichtet haben und arbeiten, öffnen Sie Ihr Cloud-Projekt (.ccproj) im Texteditor und suchen Sie folgende Zeile:

%Vor%

und fügen Sie danach Folgendes ein:

%Vor%

und ersetzen Sie IHREN PROJEKTNAMEN durch den Namen Ihres Arbeitsprojekts.

AKTUALISIEREN

Ich habe tatsächlich einen besseren Weg gefunden, dies zu tun (MSBuild 4+): Das obige Skript funktioniert NICHT, wenn Sie in Ihrem Azure-Projekt mehr als eine Worker-Rolle mit app.config-Transformationen haben. Hier ist der allgemeinere Weg:

%Vor%     
avs099 25.05.2013 11:21
quelle
0

Stellen Sie sicher, dass die Cloud Service-Konfigurationen eingerichtet sind. Klicken Sie mit der rechten Maustaste auf das Cloud-Projekt und Sie sollten die Konfigurationen sehen, die Sie verpacken möchten. Zum Beispiel, ich benenne und benutze Local, TEST & amp; PROD-Konfigurationen Ihr Cloud-Service-Projekt sollte dann 3 Konfigurationsdateien enthalten:

  • ServiceConfiguration.Local.cscfg
  • ServiceConfiguration.PROD.cscfg
  • ServiceConfiguration.TEST.cscfg

Klicken Sie mit der rechten Maustaste auf das Cloud-Service-Projekt, wählen Sie "Paket" und wählen Sie den richtigen Dienst & amp; Erstellen Sie Konfigurationen für Ihre Bereitstellung.

Hinweis: app.configs werden im Build-Prozess nicht transformiert, es sei denn, Sie fügen eine MS hinzu - Siehe diese SO-Antwort für eine Technik, um eine Transformation im Build-Prozess durchzuführen. Für Cloud-Implementierungen ist es jedoch besser, ServiceConfiguration zu verwenden. * .cscfg-Dateien in Kombination mit CloudConfigurationManager.GetSetting("settingsKey") - CloudConfigurationManager.GetSetting wurde in SDK 1.7 hinzugefügt - wenn es in Role ist, erhält es den Wert von ServiceConfig sonst erhalten Sie von web.config / app.config appSettings

    
viperguynaz 11.12.2012 20:56
quelle