Ich habe ein ArcMap-Add-In entwickelt, für das eine Konfigurationsdatei erforderlich ist. Nachdem ich eine Weile versucht habe, Konfigurationswerte aus einer einzelnen App.Config-Datei zu lesen (und immer null zu bekommen), kann das Add-In meiner Meinung nach hier keine Werte lesen, da es sich um eine Klassenbibliothek handelt, und sucht nach der aufrufenden Anwendung (ArcMap). 's Konfigurationsdatei, wenn ich nach dem Wert eines Schlüssels frage (daher die Null).
Um dies zu umgehen, habe ich eine App.Settings-Datei verwendet, die die Anwendung gut lesen kann. Durch das Erstellen dieser Datei wird auch eine App.Config-Datei in die Umgebung eingefügt, und Visual Studio scheint die beiden Dateien während der Entwicklung synchron zu halten.
Jetzt, da das Add-In bereitgestellt wird, muss ich in der Lage sein, Konfigurationswerte (z. B. den Speicherort der Protokolldatei) zu ändern. Ich habe versucht, die .esriaddin-Datei zu öffnen / zu extrahieren und die App.Config-Datei dort zu aktualisieren, aber das Add-In behält die gleichen Konfigurationswerte bei, die es beim Kompilieren hatte. Ich weiß, dass die neuen App.Config-Werte in der .esriaddin-Datei beibehalten werden, da ich sie nach dem Schließen des Archivs erneut anzeigen kann.
Kennt jemand eine zuverlässige Möglichkeit, ein Add-In zu konfigurieren und zuzulassen, dass diese Konfiguration nach der Bereitstellung aktualisiert werden kann? Irgendwelche Vorschläge sind sehr willkommen, da es lächerlich erscheint, dass ich dafür eine benutzerdefinierte Konfigurationsdatei brauche.
App.Settings-Werte befinden sich auf Anwendungsebene, und derzeit haben sowohl App.Settings als auch App.Config folgende Build-Aktion: Keine / Nicht kopieren.
quelle
In Anlehnung an eine ähnliche Antwort können Sie dies in Ihrem Add-In verwenden:
quelle
this.GetType().Assembly.Location + ".config"
Die standardmäßige .NET-Konfigurationsdatei ist pro Anwendung und nicht pro Bibliothek. Dies bedeutet, dass Ihre Konfigurationseinstellungen in ArcMap.exe.config angegeben werden müssen, wenn Ihr Add-In im ArcMap-Prozess ausgeführt wird. Diese Konfigurationseinstellungen müssen neben ArcMap.exe platziert werden.
Dies ist in der Produktionsumgebung natürlich nicht immer möglich und verletzt auch die Isolation von Addins, was einer der Gründe ist, warum Addins überhaupt eingeführt wurden.
Sie müssen Ihre Einstellungen anders speichern, entweder in Ihrer eigenen Konfigurationsdatei (wie in Kirks Antwort angegeben) oder in der Systemregistrierung.
Sie können Änderungen an Ihrer Konfigurationsdatei auf verschiedene Arten überwachen, beispielsweise mithilfe der FileSystemWatcher- Klasse.
quelle
Die Antwort von Kirk Kuykendall hat bei mir nicht funktioniert, da sie immer wieder auf die DLL selbst verweist. Ich habe Folgendes verwendet, um auf die Konfigurationsdatei zu verweisen
quelle
Während ich mir das neue Modell für das ESRI-Addin nicht angesehen habe, ist das, was ich von anderen getan und gesehen habe, der Benutzer des UserHive in der Registrierung. Sie können dann einen Bildschirm in Ihrem Add-In haben, um die Liste der benötigten Werte zu aktualisieren.
Bei Verwendung einer App.config-Datei müssen Sie die App / Erweiterung in der Regel neu starten, um neue Werte zu lesen. Es ist einfacher, Aktualisierungen direkt aus der Registrierung vorzunehmen.
quelle
Sie können versuchen, die Kopie der Konfigurationsdatei im Add-In-Assembly-Cache zu ändern . Ich glaube, der Esriaddin wird von ArcGIS nur einmal erweitert. Nachträgliche Änderungen können daher möglicherweise nicht verwendet werden (obwohl darauf hingewiesen werden sollte , dass die esriaddin-Datei neuer als ihr Cache ist).
Vista / 7: C: \ Benutzer \\ AppData \ Local \ ESRI \ Desktop10.0 \ AssemblyCache
XP: C: \ Dokumente und Einstellungen \\ Lokale Einstellungen \ Anwendungsdaten \ ESRI \ Desktop10.0 \ AssemblyCache
quelle