Можно ли определить <configSections>в конфигурации приложения зависимого DLL - PullRequest
2 голосов
/ 15 января 2009

У меня есть пользовательский надстройка .NET для приложения, и я пытаюсь создать configSections для файла конфигурации надстройки. Проблема в том, что я не могу прочитать этот раздел, если загрузить конфигурацию, используя OpenMapperExeConfiguration / OpenExeConfiguration.

Вот мой конфигурационный файл (MyTest.dll.config)

<configuration>
  <configSections>
    <section name="test" type="MyTest, Test.ConfigRead"/>
    </configSections>
    <test>
            ..Stuff here
        </test>
    <appSettings>
        <add key="uri" value="www.cnn.com"/>
    </appSettings>
</configuration>

Вот мой пример кода для доступа к тесту configSection

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();  
fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + "config";    
Configuration applicationConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None);
//Using OpenExeConfiguration doesnt help either.
//Configuration applicationConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
//Accessing test section
applicationConfig.GetSection("test");

//Accessing AppSettings works fine.
AppSettingsSection appSettings = (AppSettingsSection)applicationConfig.GetSection("appSettings");
appSettings.Settings["uri"].Value;

Как показано, значение appsettings можно прочитать очень хорошо. Возможно ли иметь configSections в любой другой конфигурации, кроме файла конфигурации основного приложения?

Ответы [ 3 ]

0 голосов
/ 28 августа 2009

Вы пропустили '.' Разделитель

fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + "config"; 

добавить '.':

fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + ".config"; 
0 голосов
/ 19 января 2019

Это НЕ работает, как вы упомянули в вопросе.

У вас может возникнуть ощущение, что вы можете загрузить файл DLL.Config, но он не загружается приложением, но, вероятно, он работает, потому что у вас есть тот же раздел appsettings в app.config приложения. По умолчанию каждый домен приложения имеет конфигурационный файл и в основном его имя по имени exe (поэтому имя будет applicationname.exe.config .

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

Теперь у вас есть две альтернативы для достижения того, чего вы хотите достичь:

Вариант 1. Вы можете поддерживать отдельные файлы конфигурации для каждого раздела конфигурации

Каждый класс, унаследованный от ConfigurationSection, имеет свойство с именем «configSource». В main application.exe.config вы можете указать пользовательский раздел, как показано ниже:

<CustomSection configSource="{relative file name}" />
<appSettings file = "relative file name" />

Таким образом, вы можете сохранить разделы конфигурации разделенными на несколько файлов конфигурации, и вы все равно сможете получить к ним доступ, используя обычный синтаксис system.configuration.

Подробнее см. .

Вариант 2: изменить exe по умолчанию

файл конфигурации по умолчанию с именем application.exe.config. Его можно изменить, используя следующий синтаксис

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);

Таким образом, вы можете установить любой другой xml-файл в качестве конфигурационного файла для программы.
Обратите внимание, что вы должны вызывать этот метод SetData перед первым вызовом классов конфигурации (то есть до того, как система прочитает файлы конфигурации). Вы можете установить свой .dll.config в качестве файла конфигурации приложения и прочитать весь раздел конфигурации оттуда. См. this для получения более подробной информации об опции 2.

Надеюсь, это даст достаточно информации.

0 голосов
/ 15 января 2009

Параметры конфигурации применяются к приложению (app.config, расположенному в корне приложения для .EXE, веб-корню для веб-приложений) и машине (machine.config, расположенной в [System Root] \ Microsoft.NET \ Framework [CLR Version] \ КОНФИГ) уровень.

Единственный другой используемый файл конфигурации - это файл конфигурации политики, который используется для создания политик управления версиями сборки и связан со сборкой путем использования инструмента AL. Это, очевидно, то, что вы не хотите делать.

Попробуйте объединить разделы конфигурации надстройки с разделом конфигурации текущего приложения, чтобы создать один файл конфигурации уровня приложения или же поместить их в файл machine.config.

...