我正在玩如何使用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>
答案 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的标签。