Чтение dll.config (не app.config!) Из подключаемого модуля

Я пишу .dll C # .NET 2.0, которая является подключаемым модулем к более крупному приложению. В проекте 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. Мне нужен рецепт для выполнения этой задачи. Мне также нужна ссылка на четкое объяснение (с примерами) того, как настройки должны работать в .NET 2.0.


person Rodney Schuler    schedule 30.07.2009    source источник


Ответы (2)


Вам нужно будет загрузить 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);
    }
    
person Richard    schedule 01.08.2009
comment
фигурные скобки ставятся там, где они должны быть. Пальцы вверх! - person morethanyell; 24.05.2018

1- откройте файл app.config в Visual Studio

2- в теге "configuration" добавьте свои конфигурации в тег "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»

  • using System.Configuration;
  • using System.Reflection;

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

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

  • откройте файл "MyProj.dll.config"
  • затем обновите свои конфигурации
person Mohamad Chami    schedule 15.11.2016
comment
Спасибо, Мохамад! Я прочитал многие из этих постов, и ваш единственный, который сработал! - person J-Roel; 27.09.2017