在configSource中使用外部.config文件会产生错误

时间:2011-05-12 15:42:43

标签: c# .net app-config

我正在玩如何使用Configuration Manager在App.config文件中读取/写入C#中的WPF应用程序的自定义部分。我在.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 个答案:

答案 0 :(得分:8)

我得到了同样的错误。在我的情况下,由于我在两个文件中有密钥,然后将appSettings标记检测为重复。

如果您需要保存web.config中的某些与项目相关的密钥以及另一个文件中的个性化密钥(出于安全原因建议),请使用file属性而不是configSource

web.config 文件:

<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>

希望对别人有所帮助!

答案 1 :(得分:3)

我的问题是我在同一个标​​签中添加了一个configSource和一个键。

<强>不正确:

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

如果删除“add”标记或将其移动到configSource文件中,则错误就会消失。

<强>正确:

<appSettings configSource="Appsettings.config" />

答案 2 :(得分:2)

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 ??

答案 3 :(得分:1)

如果您在外部创建的部分是在configSections中定义的,则应将configSource属性放在定义该部分的元素中。只有appSettings和connectionStrings部分(不需要configSections中的定义)应该在主配置文件的主体中包含带有configSource的标签。