Использование внешнего файла .config в configSource приводит к ошибке - PullRequest
8 голосов
/ 12 мая 2011

Я играл с тем, как использовать Configuration Manager для чтения / записи пользовательских разделов в файле App.config для приложения WPF в C #.Я прочитал эту превосходную статью о .NET 2.0 Configuration Demystified , и она мне очень помогла в использовании файлов конфигурации.Вот исходный файл App.config, который я написал, и он отлично работает.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="example" type="CustomConfig.ExampleSection, CustomConfig" />
  </configSections>
  <example version="A sample string value." />
  <appSettings>
    <add key="version_string" value="1.01" />
  </appSettings>
</configuration>

Но когда я изменил файл App.config таким образом, что мой пользовательскийраздел будет считан из внешнего файла конфигурации, упомянутого в configSource, Visual Studio выдаст мне ошибку

Формат файла configSource должен быть элементом, содержащим имя раздела.

Вот файлы App.config и example.config

Изменен файл App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="example" type="CustomConfig.ExampleSection, CustomConfig" />
  </configSections>
  <example configSource="example.config" />
  <appSettings>
    <add key="version_string" value="1.01" />
  </appSettings>
</configuration>

example.config

<?xml version="1.0"?>
<example>
    <add key="version" value="blahblah" />
</example>

Ответы [ 4 ]

8 голосов
/ 31 марта 2016

Я получил ту же ошибку. В моем случае это связано с тем, что у меня есть ключи в двух файлах, а затем определить тег appSettings как дублированный.

если вам нужно сохранить некоторые связанные с проектом ключи в файле web.config, а ваш персонализированный ключ - в другом файле (рекомендуется из соображений безопасности), используйте свойство file вместо configSource.

web.config file:

<configuration>
  <appSettings file="../AppSettings.config">
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
  </appSettings>
</configuration>

AppSettings.config Файл:

<?xml version="1.0"?>

<appSettings>
  <add key="RutaBodega" value="D:\Test\Card"/>
  <add key="CodeLen" value="5"/>
</appSettings>

Надеюсь, что это поможет другим!

3 голосов
/ 03 сентября 2015

Моя проблема в том, что у меня было добавление configSource И ключ в том же теге.

Неправильно:

<appSettings configSource="Appsettings.config">
    <add key="Setting1" value="May 5, 2014"/>
</appSettings>

Если вы удалите тег «add» или переместите его в файл configSource, ошибка исчезнет.

Правильно:

<appSettings configSource="Appsettings.config" />
2 голосов
/ 12 мая 2011

Редактор / intellisense Visual Studio имеет недостаток в том, что он жалуется на атрибут configSource= - но это абсолютно законно, и он работает; Я использую его каждый день в различных производственных системах.

Моя рекомендация: просто попробуйте! :-) Запустите код - я уверен, что он будет работать (ваши конфиги выглядят нормально для меня).

Обновление: ОК - похоже, вы полностью меняете стиль тега <example>. В вашем оригинале app.config у вас есть:

<example version="A sample string value." />

Итак, ваш экстернализованный example.config должен содержать те же значения и такую ​​же структуру:

<?xml version="1.0"?>
<example version="A sample string value." />

Можете ли вы попробовать с этим example.config ??

1 голос
/ 12 мая 2011

Если раздел, который вы делаете внешним, определен в configSections, вы должны поместить атрибут configSource в элемент, определяющий раздел.Только разделы appSettings и connectionStrings (для которых не нужны определения в configSections) должны иметь теги с configSource в теле основного файла конфигурации.

...