Чтение dll.config (не app.config!) Из модуля плагина - PullRequest
17 голосов
/ 30 июля 2009

Я пишу C # .NET 2.0 .dll, которая является плагином для более крупного приложения . В проекте Visual Studio для моего модуля есть файл app.config, который копируется в MyProj.dll.config рядом с MyProj.dll.

Планируется, что MyProj.dll.config будет отредактирован после развертывания .dll. Я пытаюсь прочитать мои настройки из этого измененного локального файла. Я попытался вытащить LocalFilesSettingsObject и изменить его имя приложения на мой .dll следующим образом:

        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();

Это не работает. Я изо всех сил пытаюсь обернуть голову вокруг всего беспорядка .NET Settings. Я хотел бы рецепт, чтобы закончить эту задачу. Я также хотел бы получить ссылку на четкое объяснение (с примерами) того, как должны работать настройки в .NET 2.0

Ответы [ 2 ]

26 голосов
/ 01 августа 2009

Вам нужно будет загрузить x.dll.config (с помощью API конфигурации) самостоятельно. Вся автоматическая обработка файлов (включая .Settings) полностью относится к machine.config / y.exe.config / user-settings.

Чтобы открыть именованный файл конфигурации:

  • Ссылка System.Configuration.dll сборка.
  • Использование System.Configuration
  • Создать код как:

    Configuration GetDllConfiguration(Assembly targetAsm) {
      var configFile = targetAsm.Location + ".config";
      var map = new ExeConfigurationFileMap {
        ExeConfigFilename = configFile
      };
      return ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
    }
    
5 голосов
/ 15 ноября 2016

1 - открыть файл app.config в visual studio

2 - в теге «конфигурации» добавьте свои конфигурации в тег «appSettings», как показано ниже:

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

3- в вашем коде c #

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

и не забудьте добавить это 2 раза для "ConfigurationManager" и "Assembly"

  • с использованием System.Configuration;
  • с использованием System.Reflection;

если System.Configuration не отображается, необходимо добавить ссылку «System.Configuration» в списке ссылок

4 - вы можете обновить конфигурации для DLL следующим образом:

  • открыть файл " MyProj.dll.config "
  • затем обновите ваши конфигурации
...