应用程序之间的常见app.config

kla*_*ist 6 c#

我需要一个由三个应用程序共享的公共配置文件

我通过添加appSettings中的文件解决了这个问题

<appSettings file="ait.config">
    <!--<add key="Culture" value="zh-CN" />-->
    <add key="Culture" value=""/>
    <add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

在ait.config中我存储了一些常见的值,比如

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
    <add key="Username" value="Klabberius" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

如果我试着读它就好

 string stvalue = ConfigurationManager.AppSettings["Username"];
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我尝试写一个像这样的值

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

config.AppSettings.Settings["Username"].Value = userName;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Run Code Online (Sandbox Code Playgroud)

它不是写入公共文件ait.config,而是将密钥用户名添加到每个单独应用程序中的标准app.config,任何人都知道如何解决这个问题.

AGu*_*ald 1

使用您的方法,您可以更改当前配置,而不是您想要的文件,因为这是您打开的文档。不幸的是,共享配置似乎没有被“接受”为配置文件,因为它缺少配置节点。您可以从配置中将共享配置作为“普通”xml 文档打开(在代码行 1 之后):

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(config.AppSettings.File);
Run Code Online (Sandbox Code Playgroud)

那么你应该改变文档。为我感到羞耻,我不擅长 linq to xml,下面的方法有效,但可能有一种更简单的方法。

XmlNode n = xmlDoc.SelectSingleNode("//appSettings");
XmlNode x = n.ChildNodes[0];
x.Attributes[1].Value = userName;
xmlDoc.Save(config.AppSettings.File);
Run Code Online (Sandbox Code Playgroud)