2009-07-30 7 views
16

Ich schreibe eine C# .NET 2.0. DLL, die ein Plug-in zu einem Larger application ist. Das Visual Studio-Projekt für mein Modul enthält eine app.config-Datei, die zusammen mit MyProj.dll in eine MyProj.dll.config kopiert wird.Dll.config (nicht app.config!) Von einem Plugin-Modul lesen

Der Plan ist, dass MyProj.dll.config wird nach der Bereitstellung der DLL bearbeitet werden. Ich versuche, meine Einstellungen von dieser modifizierten lokalen Datei zu lesen. Ich habe versucht, die LocalFilesSettingsObject herausziehen und zu ändern ist es Anwendungsnamen meiner DLL wie folgt aus:

 Properties.Settings config = Properties.Settings.Default; 
     SettingsContext context = config.Context; 
     SettingsPropertyCollection properties = config.Properties; 
     SettingsProviderCollection providers = config.Providers; 
     SettingsProvider configFile = Properties.Settings.Default.Providers["LocalFileSettingsProvider"]; 
     configFile.ApplicationName = Assembly.GetExecutingAssembly().GetName().Name; 
     config.Initialize(context, properties, providers); 
     config.Reload(); 

, die nicht funktioniert. Ich kämpfe darum, den ganzen .NET-Settings-Chaos in den Griff zu bekommen. Ich hätte gerne ein Rezept, um diese Aufgabe zu erledigen. Ich möchte auch einen Link zu einer klaren Erklärung (mit Beispielen), wie Einstellungen in .NET 2.0 funktionieren sollten

Antwort

22

Sie müssen die x.dll.config (mit der Konfigurations-API) selbst laden. Bei der gesamten automatischen Dateiverarbeitung (einschließlich .Settings) dreht sich alles um machine.config/y.exe.config/user-settings.

Um eine benannte Konfigurationsdatei zu öffnen:

  • Referenz System.Configuration.dll Montage.
  • Mit System.Configuration
  • Code erstellen wie:

    Configuration GetDllConfiguration(Assembly targetAsm) { 
        var configFile = targetAsm.Location + ".config"; 
        var map = new ExeConfigurationFileMap { 
        ExeConfigFilename = configFile 
        }; 
        return ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 
    } 
    
2

1- offen app.config Datei in Visual Studio

2- in der "Konfiguration" Tag fügen Sie Ihre Konfigurationen im Tag "appSettings" wie folgt:

<configuration> 
    <appSettings> 
     <add key="UserName" value="aaa"/> 
     <add key="Password" value="111"/> 
    </appSettings> 
</configuration> 

3- im Code C#

var appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
string userName = appConfig.AppSettings.Settings["UserName"].Value; 
string password = appConfig.AppSettings.Settings["Password"].Value; 

und vergessen Sie nicht dieses Bild 2 usings für "Configuration" hinzufügen und für "Assembly"

  • mit System.Configuration;
  • mit System.Reflection;

wenn die System.Configuration, nicht zeigen Sie die Referenz "System.Configuration" in den Referenzen müssen hinzufügen

4- Sie die Konfigurationen für die DLL als Gebrüll aktualisieren können:

  • öffnen Sie die Datei "MyProj.dll.config"
  • dann Konfigurationen aktualisieren
+0

Danke Mohamad! Ich habe viele dieser Beiträge durchgelesen und deine ist die einzige, die funktioniert hat! –

Verwandte Themen