11

我想在配置文件中保存一些设置以供将来使用。我正在尝试使用我在所有教程中看到的常规代码 -

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 config.AppSettings.Settings["username"].Value = m_strUserName;

 // I also tried - 
 //config.AppSettings.Settings.Remove("username");
 //config.AppSettings.Settings.Add("username", m_strUserName);

 config.Save(ConfigurationSaveMode.Modified);
 ConfigurationManager.RefreshSection("appSettings");

现在 - 我可以在运行时看到 - “调试”文件夹上的文件“...vshost.exe.config”发生了变化,当我关闭我的应用程序时——所有的更改都被删除了。我能做些什么?

4

2 回答 2

29

要使用普通 exe 的配置文件进行测试,请取消选中项目属性菜单中“调试”选项卡中的“启用 Visual Studio 托管进程”复选框。这将使 Visual Studio 不再使用该vshost.exe文件来启动,并且将使用正确的配置文件。

在此处输入图像描述

于 2012-07-15T08:26:24.230 回答
10

当您将应用程序部署到最终用户时,没有 vshost.config。
您的更改将应用​​于真正的 exe.config。所以你不必为此担心。

当您在调试会话中构建应用程序时,项目中的 app.config 文件会被复制到输出目录。然后这个配置文件也被复制到 vshost.config 中。这样,app.config 的内容将覆盖在调试会话期间在 vshost.exe.config 中所做的任何更改。

但是,让我说将此类信息写入应用程序配置是一种不好的做法。配置文件应仅用于存储在应用程序生命周期内通常不会更改的永久配置。例如,连接设置是存储在那里的有效信息,因为您通常不会更改这些设置,也不想对它们进行硬编码。

像用户名这样的设置应该使用 user.config 代替。此配置是每个用户/每个应用程序,并允许读/写访问。

于 2012-07-15T08:21:10.597 回答