我需要一个由三个应用程序共享的公共配置文件
我通过添加appSettings
中的文件解决了这个问题<appSettings file="ait.config">
<!--<add key="Culture" value="zh-CN" />-->
<add key="Culture" value=""/>
<add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
在ait.config中,我存储了一些常见的值,如
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="Username" value="Klabberius" />
</appSettings>
如果我试着像
那样阅读 string stvalue = ConfigurationManager.AppSettings["Username"];
它工作正常,但如果我尝试写一个像
这样的值System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["Username"].Value = userName;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
不是写入公共文件ait.config,而是将密钥用户名添加到每个单独应用程序中的标准app.config,任何人都知道如何解决这个问题。
答案 0 :(得分:1)
使用您的方法,您可以更改当前配置,而不是所需的文件,因为这是您打开的文档。不幸的是,共享配置似乎不被“接受”为配置文件,因为它缺少配置节点。您可以从config(在代码行1之后)打开共享配置作为“普通”xml文档:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(config.AppSettings.File);
然后你应该改变文档。对我感到羞耻我对linq到xml不太好,下面的工作方式,但可能有一个更简单的方法。
XmlNode n = xmlDoc.SelectSingleNode("//appSettings");
XmlNode x = n.ChildNodes[0];
x.Attributes[1].Value = userName;
xmlDoc.Save(config.AppSettings.File);
答案 1 :(得分:0)
我相信应用设置文件路径默认为app.config。可能会让人耳目没有测试过这个,但是请尝试这个 - 在初始化配置之后和调用save之前添加这行代码
config.AppSettings.File = config.FilePath;
HTH
答案 2 :(得分:0)
将设置划分为单独文件的标准方法是使用ConfigSource of ConfigurationSection。因此,如果您想在“ait.config”中保留AppSettings的 ALL ,您可以这样做:
<appSettings configSource="ait.config" />
但是,请注意,仅当您将 ALL 的AppSettings保留在单独的文件中时,此方法才有效。如果您尝试在主应用配置文件中保留一些设置,例如:
<appSettings configSource="ait.config">
<add key="Culture" value=""/>
<add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
您会收到一个例外情况,例如“部分只能在每个配置文件中显示一次。”。
您应该为共享配置使用“自定义配置部分”,请尝试:
这是一个简单的入门示例:
定义自定义栏目
public class CommonConfSection : ConfigurationSection
{
private const String UserNameProperty = "Username";
[ConfigurationProperty(UserNameProperty, DefaultValue = "__UNKNOWN_NAME__", IsRequired = false)]
public String UserName
{
get { return (String)this[UserNameProperty]; }
set { this[UserNameProperty] = value; }
}
}
<强> App.config中:强>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="CommonSettings"
type="[Your Assembly Name].CommonConfSection, [Your Assembly Name]"
/>
</configSections>
<appSettings>
<add key="Culture" value=""/>
<add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
<CommonSettings configSource="common.config" />
</configuration>
注意:
以下是 common.config 的样子:
<?xml version="1.0" encoding="utf-8" ?>
<CommonSettings Username="testUser" />