Sie können eine separate Konfigurationsdatei haben, diese muss jedoch "manuell" ConfigurationManager.AppSettings["key"]
gelesen werden. Dadurch wird nur die Konfiguration der laufenden Assembly gelesen.
Angenommen, Sie verwenden Visual Studio als IDE, können Sie mit der rechten Maustaste auf das gewünschte Projekt klicken → Hinzufügen → Neues Element → Anwendungskonfigurationsdatei
Dies wird App.config
dem Projektordner hinzugefügt , und geben Sie Ihre Einstellungen dort unter <appSettings>
Abschnitt ein. Wenn Sie Visual Studio nicht verwenden und die Datei manuell hinzufügen, geben Sie ihr den folgenden Namen: DllName.dll.config . Andernfalls funktioniert der folgende Code nicht ordnungsgemäß.
Nun aus dieser Datei zu lesen haben folgende Funktion:
string GetAppSetting(Configuration config, string key)
{
KeyValueConfigurationElement element = config.AppSettings.Settings[key];
if (element != null)
{
string value = element.Value;
if (!string.IsNullOrEmpty(value))
return value;
}
return string.Empty;
}
Und um es zu benutzen:
Configuration config = null;
string exeConfigPath = this.GetType().Assembly.Location;
try
{
config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
}
catch (Exception ex)
{
//handle errror here.. means DLL has no sattelite configuration file.
}
if (config != null)
{
string myValue = GetAppSetting(config, "myKey");
...
}
Sie müssen auch einen Verweis auf den System.Configuration-Namespace hinzufügen, damit die ConfigurationManager-Klasse verfügbar ist.
Wenn Sie das Projekt DllName.dll.config
erstellen, haben Sie neben der DLL auch eine Datei, die Sie mit der DLL selbst veröffentlichen müssen.
Das obige Beispiel ist ein grundlegender Beispielcode. Wenn Sie an einem vollständigen Beispiel interessiert sind, lesen Sie bitte diese andere Antwort .
Der Schatten-Assistent ist das Ohr für Sie
quelle
string exeConfigPath = this.GetType().Assembly.Location;
zu etwas wie zu ändern :string exeConfigPath = @"C:\MyFolder\DllFolder\ExeName.exe";
Leider können Sie nur eine app.config-Datei pro ausführbarer Datei haben. Wenn Sie also DLLs mit Ihrer Anwendung verknüpft haben, können diese keine eigenen app.config-Dateien haben.
Die Lösung lautet: Sie müssen die Datei App.config nicht in das Projekt der Klassenbibliothek einfügen.
Sie fügen die Datei App.config in die Anwendung ein, die auf die DLL Ihrer Klassenbibliothek verweist.
Nehmen wir zum Beispiel an, wir haben eine Klassenbibliothek namens MyClasses.dll, die die Datei app.config wie folgt verwendet:
Angenommen, wir haben eine Windows-Anwendung namens MyApp.exe, die auf MyClasses.dll verweist. Es würde eine App.config mit einem Eintrag wie dem folgenden enthalten:
ODER
Eine XML-Datei ist am besten für app.config geeignet. Verwenden Sie xml serialize / deserialize nach Bedarf. Sie können es so nennen, wie Sie wollen. Wenn Ihre Konfiguration "statisch" ist und nicht geändert werden muss, können Sie sie auch als eingebettete Ressource zum Projekt hinzufügen.
Hoffe, es gibt eine Idee
quelle
ConfigurationSettings
ist jetzt veraltet und ersetzt durchConfigurationManager
, also wäre das Äquivalent jetztConfigurationManager.AppSettings
Konfigurationsdateien sind anwendungsbezogen und nicht montagebezogen. Daher müssen Sie die Konfigurationsabschnitte Ihrer Bibliothek in die Konfigurationsdatei jeder Anwendung einfügen, die Ihre Bibliothek verwendet.
Es ist jedoch nicht empfehlenswert, die Konfiguration aus der Konfigurationsdatei der Anwendung, insbesondere dem
appSettings
Abschnitt, in einer Klassenbibliothek abzurufen. Wenn Ihre Bibliothek Parameter benötigt, sollten diese wahrscheinlich als Methodenargumente in Konstruktoren, Factory-Methoden usw. von jedem übergeben werden, der Ihre Bibliothek aufruft. Dies verhindert, dass aufrufende Anwendungen versehentlich Konfigurationseinträge wiederverwenden, die von der Klassenbibliothek erwartet wurden.XML-Konfigurationsdateien sind jedoch äußerst praktisch. Der beste Kompromiss, den ich gefunden habe, ist die Verwendung benutzerdefinierter Konfigurationsabschnitte. Sie können die Konfiguration Ihrer Bibliothek in eine XML-Datei einfügen, die vom Framework automatisch gelesen und analysiert wird, und Sie vermeiden mögliche Unfälle.
Sie können mehr über benutzerdefinierte Konfigurationsabschnitte auf MSDN erfahren, und auch Phil Haack hat einen schönen Artikel darüber.
quelle
appSettings
benutzerdefinierte Abschnitte anstelle von Konventionen eine großartige Alternative bieten. es ist schließlich so ziemlich das, was die ASP.NET-Mitgliedschaft verwendet.Nur um etwas zu tun, habe ich die Top-Antwort in eine Klasse umgestaltet. Die Verwendung ist so etwas wie:
quelle
Wenn Sie einem Klassenbibliotheksprojekt in Visual Studio Einstellungen hinzufügen (Projekteigenschaften, Einstellungen), wird Ihrem Projekt eine app.config-Datei mit den entsprechenden Abschnitten userSettings / applyatioNSettings und den Standardwerten für diese Einstellungen aus Ihren Settings.settings hinzugefügt Datei.
Diese Konfigurationsdatei wird jedoch nicht zur Laufzeit verwendet. Stattdessen verwendet die Klassenbibliothek die Konfigurationsdatei ihrer Hostanwendung.
Ich glaube, der Hauptgrund für das Generieren dieser Datei ist, dass Sie die Einstellungen kopieren / in die Konfigurationsdatei der Hostanwendung einfügen können.
quelle
Ich erstelle derzeit Plugins für eine Software-Marke für den Einzelhandel, bei denen es sich tatsächlich um .net-Klassenbibliotheken handelt. Voraussetzung ist, dass jedes Plugin mithilfe einer Konfigurationsdatei konfiguriert wird. Nach ein wenig Recherche und Testen habe ich die folgende Klasse zusammengestellt. Es macht den Job einwandfrei. Beachten Sie, dass ich in meinem Fall keine lokale Ausnahmebehandlung implementiert habe, da ich Ausnahmen auf einer höheren Ebene abfange.
Möglicherweise sind einige Anpassungen erforderlich, um den Dezimalpunkt im Fall von Dezimalstellen und Doppelwerten richtig zu machen, aber es funktioniert gut für meine CultureInfo ...
Beispiel für eine App.Config-Datei
Verwendung:
Dank an Shadow Wizard & MattC
quelle
Als Antwort auf die ursprüngliche Frage füge ich normalerweise die Konfigurationsdatei in meinem Testprojekt als Link hinzu. Anschließend können Sie das Attribut DeploymentItem verwenden, um es dem Ordner Out des Testlaufs hinzuzufügen.
Als Antwort auf die Kommentare, dass Baugruppen nicht projektspezifisch sein können, können sie dies und es bietet eine große Flexibilität, insbesondere. bei der Arbeit mit IOC-Frameworks.
quelle
Ich hatte das gleiche Problem und löste es, indem ich
Parameters
nach dem Hinzufügen einer Anwendungskonfigurationsdatei zum Projekt eine statische Klasse erstellte :Dann erhalten Sie einen Parameter wie folgt:
quelle
Assemblys haben keine eigene app.config-Datei. Sie verwenden die Datei app.config der Anwendung, die sie verwendet. Wenn Ihre Assembly bestimmte Dinge in der Konfigurationsdatei erwartet, stellen Sie einfach sicher, dass die Konfigurationsdatei Ihrer Anwendung diese Einträge enthält.
Wenn Ihre Assembly von mehreren Anwendungen verwendet wird, muss jede dieser Anwendungen diese Einträge in ihrer Datei app.config haben.
Ich würde Ihnen empfehlen, beispielsweise Eigenschaften für die Klassen in Ihrer Assembly für diese Werte zu definieren
Hier erhält die Eigenschaft ExternalServicesUrl ihren Wert aus der Konfigurationsdatei der Anwendung. Wenn einer Anwendung, die diese Assembly verwendet, diese Einstellung in der Konfigurationsdatei fehlt, wird eine Ausnahme angezeigt. Es ist klar, dass etwas fehlte.
MissingConfigFileAppSettings ist eine benutzerdefinierte Ausnahme. Möglicherweise möchten Sie eine andere Ausnahme auslösen.
Ein besseres Design wäre natürlich, wenn die Methode dieser Klassen diese Werte als Parameter bereitstellt, anstatt sich auf die Einstellung der Konfigurationsdatei zu verlassen. Auf diese Weise können die Anwendungen, die diese Klassen verwenden, entscheiden, wo und wie sie diese Werte bereitstellen.
quelle
Verwenden Sie Vorhandenes Element hinzufügen und wählen Sie die App-Konfiguration aus dem DLL-Projekt aus. Bevor Sie auf Hinzufügen klicken, verwenden Sie den kleinen Abwärtspfeil auf der rechten Seite der Schaltfläche Hinzufügen, um "Als Link hinzufügen".
Ich mache das die ganze Zeit in meinem Entwickler.
quelle
Präambel : Ich verwende NET 2.0.
Die von Yiannis Leoussis veröffentlichte Lösung ist akzeptabel, aber ich hatte ein Problem damit.
Erstens gibt die
static AppSettingsSection AppSettings = (AppSettingsSection)myDllConfig.GetSection("appSettings");
Null zurück. Ich musste es ändernstatic AppSettingSection = myDllConfig.AppSettings;
Dann hat der
return (T)Convert.ChangeType(AppSettings.Settings[name].Value, typeof(T), nfi);
keinen Haken für Ausnahmen. Also habe ich es geändertDies funktioniert sehr gut, aber wenn Sie eine andere DLL haben, müssen Sie den Code für jede Assembly jedes Mal neu schreiben. Dies ist also meine Version für eine Klasse, die Sie jedes Mal instanziieren können, wenn Sie sie benötigen.
Für eine Konfiguration:
Verwenden Sie es als:
quelle
Soweit mir bekannt ist, müssen Sie die gewünschten Abschnitte aus der Bibliothek .config kopieren und in die .config-Datei der Anwendung einfügen. Sie erhalten nur 1 app.config pro ausführbarer Instanz.
quelle
Warum nicht verwenden:
[ProjectNamespace].Properties.Settings.Default.[KeyProperty]
für C #My.Settings.[KeyProperty]
für VB.NETSie müssen diese Eigenschaften nur zur Entwurfszeit visuell aktualisieren durch:
[Solution Project]->Properties->Settings
quelle
Die Verwendung von Konfigurationen muss wie folgt sehr einfach sein:
Weitere Details finden Sie unter MiniConfig
quelle