我正在.net framework 4.5上创建一个应用程序
每当我想加载应用程序配置值(appSettings部分)并写入更改时,如果我刷新部分,我看不到我的更改。我做错了什么?我该如何解决呢?
码
private void LoadConfig()
{
NameValueCollection appSettings = ConfigurationManager.AppSettings;
for (int i = 0; i < appSettings.Count; i++)
{
switch (appSettings.GetKey(i))
{
case "initialCatalog":
txtInitialCatalog.Text = appSettings.GetValues(i)[0];
break;
case "dataSource":
txtDatasource.Text = appSettings.GetValues(i)[0];
break;
case "userName":
txtUsername.Text = appSettings.GetValues(i)[0];
break;
case "password":
txtPassword.Text = appSettings.GetValues(i)[0];
break;
case "portalUrl":
txtUrl.Text = appSettings.GetValues(i)[0];
break;
}
}
}
private void SaveConfig()
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
KeyValueConfigurationCollection appSettings = config.AppSettings.Settings;
appSettings["initialCatalog"].Value = txtInitialCatalog.Text;
appSettings["dataSource"].Value = txtDatasource.Text;
appSettings["userName"].Value = txtUsername.Text;
appSettings["password"].Value = txtPassword.Text;
appSettings["portalUrl"].Value = txtUrl.Text;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
App.config文件
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="initialCatalog" value="a" />
<add key="dataSource" value="b" />
<add key="password" value="c" />
<add key="userName" value="d" />
<add key="portalUrl" value="e" />
<add key="poolingTime" value="60000" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
当表单被激活时我调用ReadConfig()并在按下按钮时保存数据(确定或应用)我关闭应用程序我重新运行它但没有对app.config文件进行任何更改
任何想法???
答案 0 :(得分:8)
我认为您正在使用Visual Studio进行测试,它将App.Config复制到您的Debug / Release目录并将其重命名为YourApplication.vshost.exe.config,每次启动应用程序时都会重置它。尝试在Visual Studio外部运行可执行文件,该文件将使用YourApplication.exe.config文件,看看它是否适合您。如果我在Visual Studio之外运行它,您的代码对我有用,并保留对应用程序重新启动的更改。
答案 1 :(得分:1)
通常,我这样做:
...
config.AppSettings.Settings.Remove("TextBoxNumber");
config.AppSettings.Settings.Add("TextBoxNumber", "");
工作正常。我想这是因为你的一个密钥还没有在app.config中。您需要删除/添加它(如上面的代码),或者首先在app.config中创建密钥。
==================== 更新
试试这个:
config.AppSettings.Settings["initialCatalog"].Value = txtInitialCatalog.Text;
而不是
appSettings["initialCatalog"].Value = txtInitialCatalog.Text;
有什么不同吗?