我正在使用AppSettings的“文件”属性,但我收到此错误
根元素必须与名称匹配 引用该文件的部分, '的appSettings'
我在Windows项目中添加了ClassLibrary1.dll和ClassLibrary1.dll.config。
Ny windows应用程序有自己的app.config
<configuration>
<appSettings file="ClassLibrary1.dll.config">
<add key="main" value="main"/>
</appSettings>
</configuration>
提前谢谢
答案 0 :(得分:8)
您的外部文件必须如下所示:
<?xml version="1.0"?>
<appSettings>
<add key="main" value="main"/>
</appSettings>
与使用configSource
时不同,使用file属性时不能有配置节点。我甚至不能100%确定你可以使用具有configSource属性的配置节点,我总是匹配正在外化的根节点。有关详细信息,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/ms228154.aspx
此外,我从未试图像您一样参考汇编配置文件。我想知道这可能会导致问题吗?尝试仅将appSettings节点提取到另一个配置文件,看看是否能解决问题。
编辑:这个外部文件(我们称之为appSettings_external.config)可以通过两种方式使用:
app.config :(设置已合并)
<?xml version="1.0"?>
<configuration>
<appSettings file="appSettings_external.config">
<add key="main" value="main"/>
</appSettings>
</configuration>
app.config :(仅从外部配置中提取设置)
<?xml version="1.0"?>
<configuration>
<appSettings configSource="appSettings_external.config" />
</configuration>
答案 1 :(得分:2)
确保文件“ClassLibrary1.dll.config”中的根XML元素为“appSettings”。
答案 2 :(得分:2)
以下是基于OP最近评论的后续答案:如果我有多个外部配置文件怎么办?
我的建议是修改配置设置的设计。我假设您有多个类库,并且每个类库都有自己的一组设置,这些设置当前存储在appSettings部分中。在这种情况下,您的配置文件可能如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- App Settings for Class Library 1 -->
<add key="ClassLibrary1Value1" value="123"/>
<add key="ClassLibrary1Value2" value="234"/>
<add key="ClassLibrary1Value3" value="345"/>
<!-- App Settings for Class Library 2 -->
<add key="ClassLibrary2Value1" value="ABC"/>
<add key="ClassLibrary2Value2" value="BCD"/>
<add key="ClassLibrary2Value3" value="CDE"/>
</appSettings>
</configuration>
您访问这些设置的代码可能如下所示:
var appSettings = System.Configuration.ConfigurationManager.AppSettings;
Console.WriteLine(appSettings["ClassLibrary1Value1"]);
Console.WriteLine(appSettings["ClassLibrary1Value2"]);
Console.WriteLine(appSettings["ClassLibrary1Value3"]);
Console.WriteLine(appSettings["ClassLibrary2Value1"]);
Console.WriteLine(appSettings["ClassLibrary2Value2"]);
Console.WriteLine(appSettings["ClassLibrary2Value3"]);
相反,我建议你尝试将每个类库的设置分成它自己的配置部分。您可以通过修改可执行文件的配置文件来完成此操作:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="classLibrary1" type="System.Configuration.AppSettingsSection"/>
<section name="classLibrary2" type="System.Configuration.AppSettingsSection"/>
</configSections>
<classLibrary1 configSource="ClassLibrary1.dll.config" />
<classLibrary2 configSource="ClassLibrary2.dll.config" />
</configuration>
您的ClassLibrary1.dll.config文件如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<classLibrary1>
<add key="Value1" value="123"/>
<add key="Value2" value="234"/>
<add key="Value3" value="345"/>
</classLibrary1>
您的ClassLibrary2.dll.config文件如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<classLibrary2>
<add key="Value1" value="ABC"/>
<add key="Value2" value="BCD"/>
<add key="Value3" value="CDE"/>
</classLibrary2>
您访问这些设置的代码如下所示:
var classLibrary1AppSettings = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("classLibrary1");
Console.WriteLine(classLibrary1AppSettings["Value1"]);
Console.WriteLine(classLibrary1AppSettings["Value2"]);
Console.WriteLine(classLibrary1AppSettings["Value3"]);
var classLibrary2AppSettings = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("classLibrary2");
Console.WriteLine(classLibrary2AppSettings["Value1"]);
Console.WriteLine(classLibrary2AppSettings["Value2"]);
Console.WriteLine(classLibrary2AppSettings["Value3"]);
答案 3 :(得分:0)
结束标记的/字符似乎丢失了:
<configuration>
<appSettings file="ClassLibrary1.dll.config">
<add key="main" value="main" />
</appSettings>
</configuration>
答案 4 :(得分:0)
查看Google键入的第一个结果“根元素必须与引用文件的部分名称相匹配”
http://weblogs.asp.net/pwilson/archive/2003/04/09/5261.aspx
然后在页面
中查找“根元素必须与引用文件的节的名称相匹配”答案 5 :(得分:0)
除了确保外部配置文件确实满足错误消息中指定的要求(即xml的根元素应该是appSettings)之外,您还可以检查VS是否未读取旧版本。当您修改外部配置文件时,不会触发重新编译,因此对于每次更改,您还应修改主web.config 以便刷新(或至少触摸它)。