2016-04-11 8 views
2

Ich schrieb eine UserLogin dll. Die DLL verwendet App.Config-Datei mit einigen Standardparametern. Ich habe die Konfigurationsdatei in UserLogin.Config umbenannt, um die Lesbarkeit des Systems zu verbessern.Wie eine DLL-Konfigurationsdatei zu einem Projekt hinzufügen, die die DLL als Referenz hinzufügen?

Ich schrieb eine neue Anwendung, die Anmeldung von Benutzern erfordert. Ich habe die UserLogin.dll als Verweis auf die neue Anwendung hinzugefügt. Das Problem ist, dass die Konfigurationsdatei nicht mit der Referenz hinzugefügt wurde. Ich muss es manuell dem Ordner bin \ debug hinzufügen, um die Anwendung über Visual Studio ausführen zu können.

Ich habe kein solches Problem für die Bereitstellung, da ich die Konfigurationsdatei als Teil der Einrichtung hinzufügen.

Was ist der richtige Weg, die Konfigurationsdatei der neuen Anwendung hinzuzufügen, damit ich sie in der Entwicklungsumgebung ausführen kann?

Es folgt die UserLogin.config Datei:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="IsTestEnvironment" value="false" /> 
     <add key="AllowedUserForTestEnvironment" value="ehh" /> 
     <add key="EnableLogging" value="false" /> 
    </appSettings> 
</configuration> 

Die Klasse, die von der UserLogin.config Datei lautet:

public static class ConfigurationReader 
{ 
    private static AppSettingsSection _appSettings; 

    public static AppSettingsSection AppSettings 
    { 
     get 
     { 
      if (_appSettings == null) 
      { 
       var userPreferencesConfigFileMap = new ExeConfigurationFileMap(); 
       userPreferencesConfigFileMap.ExeConfigFilename = "UserLogin.config"; 
       var userPreferencesConfig = ConfigurationManager.OpenMappedExeConfiguration(userPreferencesConfigFileMap, ConfigurationUserLevel.None); 
       _appSettings = (AppSettingsSection)userPreferencesConfig.GetSection("appSettings");           
      } 

      return _appSettings; 
     } 
    } 

    public static bool IsTestEnvironment 
    { 
     get 
     { 
      return bool.Parse(AppSettings.Settings["IsTestEnvironment"].Value); 
     } 
    } 

    public static string AllowedUserForTestEnvironment 
    { 
     get 
     { 
      return AppSettings.Settings["AllowedUserForTestEnvironment"].Value; 
     } 
    } 

    public static string EnableLogging 
    { 
     get 
     { 
      return AppSettings.Settings["EnableLogging"].Value; 
     } 
    } 
} 

Die neue Anwendung, die das UserLogin.dll verwenden:

enter image description here

+1

Einstellungen haben Einschränkungen, sie gelten nur für eine EXE. Was sinnvoll ist, wenn Sie darüber nachdenken, eine Bibliothek kann in mehreren Programmen verwendet werden und hätte unterschiedliche Einstellungen. Technisch ist es möglich, die app.config-Einträge manuell in die app.config für das EXE-Projekt einzubinden. Nicht viel Spaß. Eine korrekte Möglichkeit besteht darin, eine Bibliothek in EXE durch Code konfigurieren zu lassen. Oder verwenden Sie einfach eine XML-Datei, die Sie von einem bekannten Speicherort laden. –

+0

Vielen Dank für Ihre Erklärung – ehh

Antwort

3

Das Problem ist, dass Sie die umbenannt haben Der Name der Konfigurationsdatei muss mit einem benutzerdefinierten Namen übereinstimmen.

Idealerweise kann jede DLL die Konfiguration von den Eltern Exes App.config verwenden, und Sie müssen nur Ihre Appsettings zur Datei App.config der Anwendung (exe), die die DLL verwendet, hinzufügen.

Warum haben Sie es auf diese Weise getrennt? Dies ist keine gute Übung.

Jetzt, seit Sie es getrennt haben, ist es ähnlich wie eine benutzerdefinierte XML-Konfigurationsdatei.

In diesem Fall können Sie versuchen, Post-Build- oder Pre-Build-Befehle mit XCOPY hinzuzufügen, um die Konfigurationsdatei in das richtige Ausgabeverzeichnis zu kopieren, so dass DLL sie abruft.

Rechts klicken Projekteigenschaften, gehen Veranstaltung Pre-Build, fügen Sie einen Befehl wie

xcopy/y "$ (SolutionDir) MyProject \ myFile.xxx" "$ (OutputDir)"

Hinweis Sie Möglicherweise müssen Sie den Pfad und Dateinamen ändern, um Ihren Anforderungen zu entsprechen.

+1

Wenn ich Sie richtig verstanden habe, sagen Sie, dass es besser ist, alles in die App.Config der DLL zu schreiben. Und für jede Anwendung, die diese DLL verwenden wird, muss ich den AppSettings-Teil in die Application AppConfig-Datei kopieren, richtig? – ehh

+0

Ja, Sie haben es richtig gemacht. Nehmen Sie einfach die benutzerdefinierte Datei und die App-Einstellungen in exes app.config auf, danach würde die normale Konfigurations-API wie gewohnt funktionieren – NatarajC