2013-02-18 92 views
7

我的程序内置了一些设置,其中都有一个用户范围。但是,当程序启动时,它只会创建包含设置的AppName.exe.config文件。user.config文件没有被创建,但app.config是?

稍后在运行时保存设置时,它会在AppData/Local/AppName /位置创建user.config文件(以前不存在),但该文件只包含保存的设置。

为什么会发生这种情况?为什么不创建user.config或在启动时使用它,如果它存在?

+0

+1 from me。请回复你来的解决方案,因为这是一个很好的问题恕我直言。有很多解决方案可以在不同的应用程序之间共享app.config文件(即不仅仅是同一个应用程序域中的类/表单),而且这些将可能会在应用程序中选择任何user.config(s)开始(这将解决您对多个文件的关注),但是我找不到直接解决获取最新的共享配置的情况,其中user.config文件可能已被其中一个共享应用更新在运行时。 – Sepster 2013-02-18 15:07:41

回答

3

Application Settings Architecture at MSDN

  1. 应用范围设置可以存储在任的machine.config或app.exe.config文件。 Machine.config始终为 只读,而app.exe.config受安全性 考虑因素限制为只读,适用于大多数应用程序。

  2. 用户范围设置可以存储在app.exe.config文件中,在这种情况下,它们被视为静态默认值。

  3. 非默认的用户范围设置存储在一个新文件user.config中,其中用户是当前执行该应用程序的人员的用户名 。您可以使用DefaultSettingValueAttribute为用户范围的 设置指定默认值。由于用户范围 设置在应用程序执行过程中经常发生更改,因此user.config始终为可读/写的 。

你看到的首先是(你叫什么)你的“建在设置”存储为(微软所谓的)“静态默认”用户范围的设置,获取存储在app.exe(按照2)。

然后,当你在运行时写回你的设置时,它们被视为“非默认”用户范围设置,并且它们被写入user.config(按照3),因此为什么只有这样做你会看到创建的user.config文件。

总之,只要用户范围设置对每个人都是相同的(默认值),则不需要每个用户的user.config文件。

+0

是否有可能将它全部推送到该文件?因为我有一个服务和一个使用它们的表单,并且会发生什么,当表单更新一个值时,它会生成此user.config文件,然后该服务仍然从app.config文件中提取值:S – JonE 2013-02-18 14:37:29

+0

我不是确保你能够在两个不同的应用程序之间“共享”一个配置(一个app.config,或者与一个或多个user.config文件结合)。 AFAIK没有办法让'LocalFileSettingsProvider'知道它绑定的配置文件已经被外部源更新了。我怀疑你需要实现你自己派生的'SettingsProvider'(或者在'网络上有东西可以做你需要的东西')。 – Sepster 2013-02-18 14:44:18

+0

或者,您可以尝试[LocalFileSettingsProvider.GetPropertyValues](http://msdn.microsoft.com/en-au/library/system.configuration.localfilesettingsprovider.getpropertyvalues.aspx)或[LocalFileSettingsProvider.Initialize](http:// msdn.microsoft.com/en-au/library/system.configuration.localfilesettingsprovider.initialize.aspx)来查看是否其中任何一个刷新了它们的缓存设置,其中一个是从组合的app.config/user.config文件中新读取的。在访问设置之前执行此操作可能只是解决问题:它可能会识别新的user.config文件。 – Sepster 2013-02-18 15:00:34

相关问题