ESRI ArcMap-Add-In Config.esriaddinx

8

Ich bin gerade dabei, eine ältere ArcMap-Erweiterung in ein Add-In in C # zu konvertieren, und ich versuche, die XML-basierte Konfiguration optimal zu nutzen.

Config.esriaddinx eignet sich hervorragend für die Grundeinstellungen (Symbolleiste, Schaltflächen, Erweiterungsinformationen usw.). Gibt es jedoch eine Möglichkeit, andere Konfigurationsparameter wie Feldnamen, Ebenennamen, Datenbankverbindungen usw. hinzuzufügen?

Muss ich eine App.config-Datei erstellen? Wenn ja, würde die App.config-Datei weiterhin genauso gepackt / bereitgestellt wie der Rest des Add-Ins? Was wäre die beste Methode, um die Parameter zu lesen? Ich bin ein Neuling in Add-Ins und alle Vorschläge oder Beispiele wären sehr dankbar. Vielen Dank!

Petegis
quelle

Antworten:

4

Zunächst einmal habe ich nicht versucht, Config.esriaddinx für diesen Zweck zu verwenden, aber ich würde es nicht empfehlen. Es ist für die Konfiguration des Add-Ins selbst gedacht, nicht unbedingt für Benutzerdaten, und Sie möchten die beiden wahrscheinlich nicht mischen.

Es ist schon eine Weile her, dass ich mich selbst damit befasst habe, sodass ich bei den Details möglicherweise etwas verschwommen bin, aber es gibt mehrere Probleme bei der Verwendung von Konfigurationsdateien in ArcGIS-Add-Ins: ArcMap-Add-In mit app.settings, die App nicht erkennen .config Änderungen?

Insbesondere wird das Verzeichnis , in das das Add-In extrahiert wird, bei jedem Start der Anwendung überschrieben, sodass Sie Änderungen an den Einstellungen dort nicht wirklich beibehalten können. Wenn sich Ihre Einstellungen nie oder nur mit jeder neuen Version Ihres Add-Ins ändern, ist dies wahrscheinlich kein Problem.

Wenn Sie Ihr Add-In jedoch für den Endbenutzer konfigurierbar machen möchten, müssen Sie die vom Benutzer konfigurierbaren Informationen an anderer Stelle speichern, damit sie nicht überschrieben werden. Ich würde vorschlagen , die der Benutzer unter Verwendung von Application Data Ordner, deren Pfad Sie können programmatisch bestimmen , wie folgt:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Ich würde auch vorschlagen, es in einen Unterordner zu legen, der nach Ihrem Add-In benannt ist. Im Wesentlichen würden Sie jedoch aus einer Datei an diesem Speicherort laden und in einer Datei speichern, anstatt die Einstellungen aus der SettingsKlasse Ihres Add- Ins oder der Konfigurationsdatei im Verzeichnis des Add- Ins zu lesen . Wenn Sie hierfür die .NET-Konfiguration verwenden möchten, empfehle ich, die Anwendungseinstellungen und zu lesen ConfigurationManager.

Das andere Problem, das ich hatte, ist die Verwendung benutzerdefinierter Konfigurationsabschnitte bei Verwendung der .NET-Konfiguration. Die Verwendung Assembly.LoadFromund Behandlung desAssemblyResolve Ereignisses war die Lösung für dieses spezielle Problem, obwohl ich in diesem Fall aus diesem und anderen Gründen keine .NET-Konfiguration verwendet habe.

Abhängig von der Komplexität Ihres Konfigurationsszenarios können Sie wie ich die vollständige Verwendung des .NET-Konfigurationssystems vermeiden und stattdessen eine andere Methode zum Lesen und Schreiben von Konfigurationsinformationen verwenden. SerializableAttributeAm Ende habe ich markierte Klassen oder Klassen verwendet, die IXmlSerializablefür diesen Zweck in einem der komplexeren Add-Ins implementiert wurden, die ich erstellt habe und die vom Benutzer konfigurierbare Einstellungen wie Listen von Ebenen, Verbindungseinstellungen usw. enthalten. Ich würde empfehlen, die Objektserialisierung in zu lesen . NET , Einführung in die XML-Serialisierung und Implementierung von IXmlSerializable Richtig, wenn Sie an diesem Ansatz interessiert sind.

Es hört sich so an, als ob Ihre in die gleiche Richtung geht, also liegt es an Ihnen, aber ich fand, dass der XML-Serialisierungsansatz der .NET-Konfiguration für alle außer den einfachsten Konfigurationsszenarien (einfache Datentypen, keine Hierarchien / Sammlungen) vorzuziehen ist.

blah238
quelle
Tolle Infos hier, @ blah238! Ich werde diese Optionen untersuchen und sehen, was am besten funktioniert.
Petegis
Wie stellen Sie die XML-Datei im Ordner Environment.SpecialFolder.ApplicationData bereit, wenn Sie die Add-In-Datei an Ihre Benutzer verteilen? Handelt es sich um das manuelle Kopieren / Einfügen der Datei?
Vidar
1

Erstellen Sie eine config.xml-Datei und setzen Sie die Build-Aktion unter den VS-Eigenschaften für die Datei auf AddInContent.

Um dies basierend auf dem Kommentar hinzuzufügen, habe ich angenommen, dass Sie Visual Studio verwenden, um Ihr Add-In zu erstellen, da Sie dies in C # tun. Wenn Sie von dort aus eine XML-Konfigurationsdatei aus der neuen Option der Datei hinzufügen und sie config.xml nennen, wird eine leere Standarddatei erstellt. Von dort aus können Sie die XML-Einstellungen für den Schlüsselwert unter dem Tag appSettings wie bei einer normalen XML-Konfigurationsdatei angeben und dann wie gewohnt aus dem Code auf diese verweisen. Um die Build-Aktion zu ändern, sehen Sie sich das Eigenschaftenfenster an, wenn Sie die Datei in VS ausgewählt haben, und es sollte eine Build-Aktionseinstellung vorhanden sein. Wenn Sie dies auswählen, wird eine Dropdown-Liste der verfügbaren Optionen angezeigt. Wählen Sie AddInContent aus der Liste aus.

Dave Timmins
quelle
1
Willkommen bei GISse. Dies ist eine sehr kurze Antwort. Es wäre hilfreich, einige Details aufzunehmen, möglicherweise einige der von @petegis erwähnten Details, wie das Hinzufügen bestimmter Parameter zu dieser Datei. Wie würden Sie diese Datei erstellen? Wird dies über ArcMap oder in einem Texteditor durchgeführt? Was ist die richtige Struktur? Überlegen Sie, was Sie wissen müssen, um dies erfolgreich zu tun, wenn Sie noch nie zuvor eines erstellt haben. Diese Art von Informationen liefert eine hervorragende Antwort. Guter Start!
Holen Sie sich Spatial
Danke @davetimmins. Scheint einfach zu sein, ich habe es ausprobiert und es funktioniert, solange die Datei nicht "config.xml" heißt (löst einen Build-Fehler aus "Kann keine Datei erstellen, wenn diese Datei bereits existiert").
Petegis