我正在使用app.config文件来存储和读取一些参数(sql server实例名称,用户,密码,日志目录等)。现在,我需要修改一些依赖于用户并管理它的参数,但前提是我从bin / release目录运行.exe。 当我创建安装程序并安装我的应用程序时,我无法更改此参数 - 它会抛出TargetInvocationException。我试图以管理员身份运行我的应用,但没有成功。
我目前使用的代码如下:
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("username");
config.AppSettings.Settings.Add("username", this.Config.Username);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
我已尝试在stackoverflow上找到一些其他解决方案,但没有成功......
答案 0 :(得分:0)
尝试这样的事情
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
KeyValueConfigurationCollection settings = config.AppSettings.Settings;
// update SaveBeforeExit
settings[username].Value = "newkeyvalue"; //how are you getting this.Config.Username
...
//save the file
config.Save(ConfigurationSaveMode.Modified);
//relaod the section you modified
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
以下是一些要遵循的步骤例如,如果我想根据DateTime值修改设置..这个简单的解释应该让您可以轻松跟进。
1: // Open App.Config of executable
2: System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
3: // Add an Application Setting.
4: config.AppSettings.Settings.Remove("LastDateChecked");
5: config.AppSettings.Settings.Add("LastDateChecked", DateTime.Now.ToShortDateString());
6: // Save the configuration file.
7: config.Save(ConfigurationSaveMode.Modified);
8: // Force a reload of a changed section.
9: ConfigurationManager.RefreshSection("appSettings");
答案 1 :(得分:0)
理想情况下,我们无法在应用程序运行时修改配置条目。
从bin运行exe时,它没有修改* .exe.config。
而是修改了 *。vshost.exe.Config 文件。
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); returns reference to *.vshost.exe.Config file
* .exe.config是只读的,你不能更新这个文件。