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 Settings
Klasse 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.LoadFrom
und 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. SerializableAttribute
Am Ende habe ich markierte Klassen oder Klassen verwendet, die IXmlSerializable
fü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.
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.
quelle