在外部文件中编写appSettings
我有一个配置文件app.exe.config和appSettings部分有这样的:
app.file.config文件有这样的东西:
我需要在运行时编辑var1,var2和var3,我有这样的代码:
Configuration config = ConfigurationManager.OpenExeConfiguration("...path\app.exe); config.AppSettings.SectionInformation.ConfigSource = "app.file.config"; config.AppSettings.Settings["var1"].Value = "value 11"; config.AppSettings.Settings["var2"].Value = "value 22"; config.AppSettings.Settings["var3"].Value = "value 33"; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings");
当我运行config.Save ….文件app.file.config有一个appSettings节点,其属性为“file”。 此属性具有app.file.config的值
现在,如果我尝试加载配置文件,我有一个例外,消息“无法识别的属性’文件’。请注意,属性名称区分大小写。” 在app.file.config中。
如果手动删除文件属性,则会正确加载配置文件。
有任何想法吗?
保存配置文件时如何避免写入文件属性。
谢谢
使用外部配置文件对于应用程序是透明的,
这部分还可以
还有这个:
将您的代码更改为:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); config.AppSettings.Settings["var1"].Value = "value 11"; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings");
引用外部配置文件对应用程序是透明的,因此您不必直接调用它。 您可以使用配置管理器中的默认appSetting部分。
祝好运
警告 :configSource不是正确答案,如其他答案中所述。
现在,对于坏消息……如果更新ConfigurationManager读入的值,则不会保存任何外部文件。
设置:命令行项目app.config文件:
带有’复制到输出目录’的AppSettings.config文件=’总是复制’
Program.cs中:
Console.WriteLine("Local Config sections"); try { Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); Console.WriteLine("[test]=" + config.AppSettings.Settings["test"].Value); Console.WriteLine("[testExternalOnly]=" + config.AppSettings.Settings["testExternalOnly"].Value); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("press the ENTER key to end"); Console.ReadLine();
TEST1 – 由子配置’configSource’文件覆盖的appsettings
安排:
更改app.config以使用’configSource’
行动:RunProject
断言:引发exception:“每个配置文件只能出现一次。”
TEST2 – 由子配置’configSource’文件覆盖的appsettings
安排:
将app.config更改为使用’file’
行动:RunProject
断言:
config.AppSettings.Settings [“test”]。Value = OVERRIDDEN
config.AppSettings.Settings [“testExternalOnly”]。Value = INITIALSTATE
现在是坏消息……如果你使用的话,没有任何外部文件会保存
config.AppSettings.Settings["test"].Value = "NEW";
AppSettings仅保存在.exe.config文件中,然后如果关闭并打开配置,则值将被外部文件值覆盖。
TEST3 – 外部文件中的值未在’config.Save’上更新
设置:Program.cs更改为:
Console.WriteLine("Local Config sections"); Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); Console.WriteLine("BEFORE[test]=" + config.AppSettings.Settings["test"].Value); Console.WriteLine("BEFORE[testExternalOnly]=" + config.AppSettings.Settings["testExternalOnly"].Value); config.AppSettings.Settings["test"].Value = "NEW"; config.AppSettings.Settings["testExternalOnly"].Value = "NEWEXTERNAL"; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); //Shut current config config = null; //Open config config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); Console.WriteLine("AFTER[test]=" + config.AppSettings.Settings["test"].Value); Console.WriteLine("AFTER[testExternalOnly]=" + config.AppSettings.Settings["testExternalOnly"].Value); Console.WriteLine("AFTER CONFIG EXTERNAL FILE: " + System.IO.File.ReadAllText("AppSettings.config")); Console.WriteLine("AFTER CONFIG FILE: " + System.IO.File.ReadAllText(System.AppDomain.CurrentDomain.FriendlyName + ".config"));
行动:运行程序
断言:
{myExe} .exe.confg的AppSettings部分是:
AppSettings.config未更改
最后,我找到了解决方案。
解决方案是将配置文件声明为:
从代码
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); AppSettingsSection myAppSettings = config.GetSection("appSettings") myAppSettings.Settings["var1"].Value = "value 11"; config.Save(ConfigurationSaveMode.Modified);
请注意,我使用GetSection(“appSettings”)而不是config.AppSettings.Settings
感谢所有帮助StackOverflow的人。