我有一个配置文件,用于多个项目general.config
,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="mykey1" value="myvalue1"/>
<add key="mykey2" value="myvalue2"/>
</appSettings>
在其中一个项目中,我需要覆盖两个设置中的一个。所以这个项目的app.config
看起来像是:
<?xml version="1.0"?>
<configuration>
<appSettings file="general.config">
<remove key="mykey1"/>
<add key="mykey1" value="anothervalue"/>
<add key="mykey3" value="myvalue3"/>
</appSettings>
</configuration>
但是remove
在这里不起作用。如何在不破坏mykey1
的情况下覆盖mykey2
? add
适用于此案例。我可以从myvalue3
获得ConfigurationManager
。
编辑:general.config
在编译时自动复制到输出文件夹。不要担心路径问题。目前我得到了:
ConfigurationManager.AppSettings["mykey1"]
//I got "myvalue1", but I want "anothervalue" here
//that is, this item is "overrided", just like virtual methods in C#
ConfigurationManager.AppSettings["mykey2"]
//this setting will not be modified, currently it works fine
ConfigurationManager.AppSettings["mykey3"] //good
答案 0 :(得分:3)
我的一个朋友回答了这个问题。来自MSDN:
您可以使用file属性 指定一个配置文件 提供其他设置或 覆盖的设置 在appSettings元素中指定。 您可以使用文件属性 源控制团队开发 场景,例如用户想要的场景 覆盖项目设置 在应用程序中指定 配置文件。组态 文件中指定的文件 属性必须具有appSettings 元素而不是配置 element作为根节点。
因此,在此问题中,general.config
中的设置会覆盖app.config
中与我认为(想要)app.config
项目不同的项目会覆盖general.config
中的项目。现在我认为我必须用C#代码来解决这个问题(它将不可避免地看起来很丑陋)。
答案 1 :(得分:1)
您使用file
属性来加载常见设置,并期望直接添加到<appSettings>
元素的键会覆盖这些常用设置,这是可以理解的,但不幸的是,这不是它的工作原理。< / p>
Microsoft的意图是file
属性加载覆盖单个应用程序设置的常用设置。
为了解决这个问题,我们偶尔会在公共文件中声明基本设置,然后在应用程序配置中适当地命名覆盖。但是,这确实需要额外的代码,这有点难看。 e.g。
var config = ConfigurationManager.AppSettings["MSG_QUEUE_PROVIDER_OVERRIDE"]
?? ConfigurationManager.AppSettings["MSG_QUEUE_PROVIDER"]
?? "ActiveMQ";
<appSettings file="common.config">
<!-- Override the common values -->
<add key="MSG_QUEUE_PROVIDER_OVERRIDE" value="RabbitMQ"/>
</appSettings>
答案 2 :(得分:0)
元素是从孩子改变的,我的意思是当前你的app.config是父文件,值被General.config中存在的值替换
由于您在父文件中使用remove
,它实际上正在删除您在app.config中指定的元素,但之后将推入general.config中的元素。现在请在General.config中说明你说删除了app.config上的mykey3
,你会看到最终的集合没有mykey3
的密钥。
简而言之,这是行不通的。希望这有助于你。
答案 3 :(得分:0)
您可以添加另一个配置文件,例如Test.config。
<appSettings>
<add key="mykey1" value="New value"/>
</appSettings>
并在app.config appsettings部分中看起来像这样
<appSettings file="Test.config">
<add key="mykey1" value="myvalue1"/>
</appSettings>