C#-应用程序配置不';不变

C#-应用程序配置不';不变,c#,app-config,C#,App Config,我想在配置文件中保存一些设置,以备将来使用。 我尝试使用我在所有教程中看到的常规代码- Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings["username"].Value = m_strUserName; // I also tried - //config.AppSettings.Set

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

 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");
现在,我可以看到在运行时,“Debug”文件夹中的“…vshost.exe.config”文件发生了更改,当我关闭应用程序时,所有更改都被删除。
我能做什么?

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

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

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


用户名等设置应改为使用user.config。此配置为每个用户/每个应用程序,并允许读/写访问

要使用普通exe的配置文件进行测试,请在“项目属性”菜单的“调试”选项卡中选中“启用Visual Studio宿主进程”复选框。这将使visual studio不再使用
vshost.exe
文件启动,并将使用正确的配置文件


但我现在必须调试它。。。为什么vshost.config不保存更改?@tamarg您可以通过打开
\Debug
文件夹中的
\bin
文件夹并手动运行可执行文件来测试@Steve的答案。您必须记住,调试过程每次都从相同的临时文件开始。我可能也回答了,但我对此给出+1+回答得很好,斯科特,但我更愿意避免弄乱这件事,因为我倾向于忘记这面小旗,有时后果会很烦人。vshost和真实文件之间有什么不同?为什么使用该标志如此重要?请阅读steve在其评论中提供的链接,它解释了vshost进程的用途。感谢您的回答-正是我想要的。