Ich habe eine .NET-DLL, die ihre Konfigurationseinstellungen aus ihrer Konfigurationsdatei lesen muss. Normalerweise befindet sich die Konfigurationsdatei im selben Verzeichnis wie die DLL. Aber wie lese ich die Konfigurationsdatei, wenn die DLL GAC'ed ist, weil ich nur die DLLs in den GAC setzen kann, und nicht seine Konfigurationsdateien.Config-Dateien für Assemblys in GAC
Antwort
Muss der Benutzer die Dll konfigurieren? Wenn dies der Fall ist, sollte die DLL Konfigurationseinstellungen aus der app.config-Datei verwenden, nicht ihre eigene Konfiguration. Die app.config-Datei sollte im selben Verzeichnis wie die Anwendung gespeichert werden. Wenn nicht, dann könntest du ein paar verschiedene Wege gehen. Sie können Änderungen an der Datei machine.config vornehmen, damit Ihre DLL sie dort finden kann. Ich würde das nicht tun. Alternativ können Sie die Konfiguration in einer Einstellungsklasse speichern. Diese können über die Konfiguration überschrieben werden, aber Ihre Standardeinstellungen werden im generierten Code für die Einstellungsklasse über Attribute festgelegt, und das Fehlen einer Konfigurationsdatei wirkt sich nicht auf Ihre DLL aus, wenn nur die Standardwerte erforderlich sind.
Ich stimme mit tvanfosson der Gac'ed dll wird aus dem Pfad der Anwendung lesen. Aber man könnte auch die DLL informieren, die den Weg auf diese Weise:
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "THE PATH TO THE CONFIG";
System.Configuration.Configuration cfg =
System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);
string thevalue=cfg.AppSettings.Settings[variable].Value;
Sie können Executable müssen Verwendung von AppDomain.CurrentDomain.BaseDirectory, da die DLL machen wird nicht von selbst ausgeführt werden, die Sie gerade erhalten Dateiverzeichnis.
Etwas wie:
var appDomain = AppDomain.CurrentDomain.BaseDirectory;
string sFileName = appDomain.Replace("\\bin\\Debug", "");
sFileName = sFileName + "Config\\config.xml";
Sorry, da es das erste Mal ist, dass ich hier antworte..der Code ist nicht gut formatiert :( –
- 1. Auflisten von Assemblys in GAC
- 2. Wix - Assemblys für GAC dynamisch registrieren
- 3. Warum werden nicht alle Assemblys in GAC als MSIL erstellt?
- 4. Installieren von Assemblys in GAC mit Windows Installer
- 5. "Offizielle" Möglichkeit zur Bereitstellung von Assemblys in den GAC?
- 6. Hinzufügen von Assemblys zum GAC von Inno Setup
- 7. Verwaltete Assemblys mit COM ohne Verwendung des GAC registrieren
- 8. Monitor, wie oft Assemblys von GAC geladen werden
- 9. Wenn sich eine Assembly im GAC befindet, müssen alle aufgerufenen Assemblys ebenfalls im GAC enthalten sein?
- 10. Freigabe von Assemblys in .NET
- 11. ClickOnce-Anwendung, die PostSharp 1.0 verwendet, scheint 1,5 Assemblys in GAC zu benötigen
- 12. Wie bekomme ich .NET, um zuerst nach Assemblys in lokalen Ordnern anstatt nach GAC zu suchen?
- 13. Was passiert, wenn eine starke benannte Assembly, die von privaten Assemblys abhängt, in GAC installiert wird
- 14. So überschreiben Sie Baugruppen in GAC
- 15. Zu GAC oder nicht zu GAC?
- 16. Microsoft.SqlServer.Types.SqlGeography DLLs in GAC
- 17. Doppeltes System.Web in GAC!
- 18. Gibt es eine GAC-Entsprechung für .NET Core?
- 19. Visual Studio-Referenz x64 GAC
- 20. Import-Module von GAC für Powershell-Usage
- 21. Abhängigkeitsinjektion in Assemblys und Namespaces
- 22. Überprüfen Sie GAC für eine Baugruppe
- 23. Wie sucht eine .NET-Konsolenanwendung nach referenzierten Assemblys?
- 24. nUnit - ignoriere GAC-Kopie einer DLL
- 25. Referenzierte Assemblys in der Website
- 26. Bereitstellung von Assembly normalerweise in der GAC mit meinem Projekt?
- 27. Native Assembly in GAC installieren
- 28. Include GAC Assemblies in Bin
- 29. FxCop und GAC Madness
- 30. Wie referenziere ich eine Baugruppe, die sich im GAC befindet?
tvanfosson hatte eine gute Antwort, aber ich denke, das ist eine geeignetere Antwort. – Keith