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

本文关键字:文件 错误 config 外部 configSource | 更新日期: 2023-09-27 17:56:09

我正在研究如何使用配置管理器在 C# 中的 WPF 应用程序的 App.config 文件中读取/写入自定义部分。我阅读了这篇关于 .NET 2.0 配置揭秘的优秀文章,它对我使用配置文件有很大帮助。这是我编写的初始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给了我一个错误。

配置源文件的格式必须是包含名称的元素 的节。

以下是 App.config 和 example.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>

例子.config

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

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

我遇到了同样的错误。就我而言,是由于我在两个文件中有密钥,然后将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>

希望对别人有帮助!

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

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

不對:

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

如果您删除"add"标签或将其移动到configSource文件中,则错误将消失。

正确:

<appSettings configSource="Appsettings.config" />

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