none
Ein Projekt/Mappe mit unterschiedlichen Settings

    Frage

  • Hallo,

    ich habe hier ein Projekt in VisualStudio welches ich als ClickOnce veröffentliche.

    Nun soll das gleiche Projekt an anderen Standorten veröffentlicht werden. Die neuen Standorte verwenden andere Ablageorte für Vorlagen und andere Datenbankserver. Diese Daten(Pfade, Connectionstrings) liegen in meinem Projekt in den Settings.

    Jetzt suche ich eine elegante Variante das Projekt für unterschiedliche Standorte mit jeweils eigenen Settings zu veröffentlichen.

    Schön wäre es wenn ich nicht für jeden Standort eine eigene Projektmappe erstellen müsste.

    Eine Projektmappe mit jeweils einem Projekt für jeden Standort welches nur die Settings beinhaltet und ein gemeinsames Projekt mit dem gemeinsamen Rest  wäre mein Plan.

    Ich hoffe mich verständlich ausgedrückt zu haben.

    Viele Grüße

    Roland


    PS:Das Projekt ist ein WindowsForms Projekt
    • Bearbeitet Roland Franz Mittwoch, 28. Februar 2018 10:05 PS hinzugefügt
    Mittwoch, 28. Februar 2018 10:03

Antworten

  • Hallo Roland,

    unterscheiden sich die Anwendungen denn mit Ausnahme der Settings zwischen den Standorten? Gibt es also abweichende Logik, andere Formulare, ...?

    Falls nicht, sehe ich eigentlich keinen Grund, ein eigenes Projekt je Standort zu erstellen. Das würde man dann sinnvoller über eine Einstellung in den appSettings lösen, die an zentraler Stelle ausgelesen und dann zum Ermitteln der eigentlichen Einstellungen verwendet wird.

    An den Konfigurationsmanger habe ich auch schon gedacht, aber kann ich über den auch Konfigurationen wie Connection-Strings verwalten?

    Das hab ich nicht verstanden. Die Konfigurationen dienen in der Regel nur zum Einstellen der Kompilierungsoptionen. Aber darüber kann man dann bspw. auch über Konstanten und andere Einstellungen dafür sorgen, dass je nach Konfiguration eine andere Ausgabe erstellt wird.

    Bezog sich Deine Aussage mit den appSettings pro Ziel in der app.config auf diese Möglichkeit?

    Auch das hab ich nicht verstanden. Evlt. wird es mit dem obigen Satz zu den appSettings klarer. Du würdest dann in deinem Standortprojekt den appSettings Wert auslesen und anhand des Werts entscheiden, welche Einstellungen welchen Standorts Du lädst.

    Bspw. könnte dort folgendes stehen:

    <appSettings>
        <add key="Standort" value="Bremen" />
    </appSettings>
    

    In deiner Anwendung liegen dann verschiedene XML Dateien mit den Einstellungen, bspw. Bremen.xml, Hamburg.xml, ... Diese enthalten die serialisierten Daten deiner Settings. Anhand des Standort Keys deserialisierst Du die Settings aus der jeweiligen XML Datei.

    Damit ist das dann auch schon erledigt. D.h. Du hast ein einziges Projekt für alle Standorte.

    Ob das nun zu deinem Szenario passt, kann ich dir natürlich nicht sagen, da mir dazu alle möglich Details fehlen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 28. Februar 2018 13:10
    Moderator

Alle Antworten

  • Hallo Roland,

    so ganz hab ich das Problem nicht verstanden.

    Über die app.config kannst Du doch problemlos einstellen, welcher Einstellungen verwendet werden sollen (bspw. über einen entsprechenden appSettings Eintrag, der dann pro Ziel anders lautet.

    ClickOnce wird aber generell nicht wirklich hilfreich sein, da Du dort, wenn überhaupt, nur rudimentäre Einstellungen vornehmen kannst.

    Eine andere Option wäre ggfs. der Konfigurations Manager. Dort kannst Du neben Debug und Release auch eigene Konfigurationen erstellen, denen Du dann bspw. eigene Pre- oder Postbuild Ereignisse zuweist.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 28. Februar 2018 11:11
    Moderator
  • Hallo Stefan danke für Deine Antwort,

    in den Settings stehen natürlich schon einige Werte die ich möglichst nicht einzeln anpassen wollte.

    Mein gedachter Plan war eine Projektmappe mit n Projekten für jeden Standort eines.

    Bei einer Änderung am zentralen Code würde ich jetzt gerne jedes Projekt neu veröffentlichen, ohne erneute Anpassung der Werte in den Settings.

    An den Konfigurationsmanger habe ich auch schon gedacht, aber kann ich über den auch Konfigurationen wie Connection-Strings verwalten?

    Bezog sich Deine Aussage mit den appSettings pro Ziel in der app.config auf diese Möglichkeit?

    Die Frage ist für mich übrigens nicht nur auf das konkrete Projekt bezogen, sondern soll für mich auch die Vorgehensweise bei weiteren Projekten dieser Art beeinflussen.

    Grüße

    Roland


    Mittwoch, 28. Februar 2018 12:56
  • Hallo Roland,

    unterscheiden sich die Anwendungen denn mit Ausnahme der Settings zwischen den Standorten? Gibt es also abweichende Logik, andere Formulare, ...?

    Falls nicht, sehe ich eigentlich keinen Grund, ein eigenes Projekt je Standort zu erstellen. Das würde man dann sinnvoller über eine Einstellung in den appSettings lösen, die an zentraler Stelle ausgelesen und dann zum Ermitteln der eigentlichen Einstellungen verwendet wird.

    An den Konfigurationsmanger habe ich auch schon gedacht, aber kann ich über den auch Konfigurationen wie Connection-Strings verwalten?

    Das hab ich nicht verstanden. Die Konfigurationen dienen in der Regel nur zum Einstellen der Kompilierungsoptionen. Aber darüber kann man dann bspw. auch über Konstanten und andere Einstellungen dafür sorgen, dass je nach Konfiguration eine andere Ausgabe erstellt wird.

    Bezog sich Deine Aussage mit den appSettings pro Ziel in der app.config auf diese Möglichkeit?

    Auch das hab ich nicht verstanden. Evlt. wird es mit dem obigen Satz zu den appSettings klarer. Du würdest dann in deinem Standortprojekt den appSettings Wert auslesen und anhand des Werts entscheiden, welche Einstellungen welchen Standorts Du lädst.

    Bspw. könnte dort folgendes stehen:

    <appSettings>
        <add key="Standort" value="Bremen" />
    </appSettings>
    

    In deiner Anwendung liegen dann verschiedene XML Dateien mit den Einstellungen, bspw. Bremen.xml, Hamburg.xml, ... Diese enthalten die serialisierten Daten deiner Settings. Anhand des Standort Keys deserialisierst Du die Settings aus der jeweiligen XML Datei.

    Damit ist das dann auch schon erledigt. D.h. Du hast ein einziges Projekt für alle Standorte.

    Ob das nun zu deinem Szenario passt, kann ich dir natürlich nicht sagen, da mir dazu alle möglich Details fehlen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 28. Februar 2018 13:10
    Moderator