可能重复:app.config文件和XYZ.settings文件有什么区别?
我很惊讶Visual Studio中这两种机制的明显冗余来存储和管理桌面应用程序设置:
-
您可以使用XML
app.config
文件,将项目添加到<appSettings>
部分 . 可以使用ConfigurationManager
类从代码中检索这些内容 . -
或者,您可以使用Settings.settings文件通过编辑器添加单个设置 . Visual Studio将生成
Settings
类,以便在运行时对类型安全的设置进行检索 .
这两种机制似乎服务于相同(或几乎相同)的目的 . 我知道存在一些差异,但我也对重叠及其后果感到困惑 . 例如,当我使用Visual Studio向 Settings.settings
文件添加设置时,我输入的所有信息也最终作为 app.config
文件中的条目 . 显然,存在同步机制:如果我更改 app.config
文件中的设置,Visual Studio会在下次在编辑器中打开时提示我更新 Settings.settings
文件 .
我的问题是:
-
为什么有两种机制而不仅仅是一种?
-
使用
app.config
超过Settings.settings
的最常见方案是什么,反之亦然? -
如果我的应用程序正在使用
Settings.settings
并且在部署之后我在app.config
中更改了值,会发生什么?由于已经编译和分发,因此不会发生Settings.settings
的同步 .
注意 . 我已经搜索了关于这个主题的问题,但我更加困惑 . 例如,this question here的答案是相当矛盾的,并没有多少亮点 .
注意2.我知道 app.config
是一个设计时文件名,我熟悉Visual Studio复制的动态并将其重命名为可执行文件夹 .
2 回答
从.NET Framework的角度来看(暂时不说工具 - Visual Studio),从历史上看,只有
[app.exe].config
(事实上,它为's what the AppDomain defines as the configuration file. The name is defined by the AppDomain, that'为什么它是web.config
用于网络应用程序......)和machine.config
. 'app'与应用程序一起部署,'machine'用于整个机器 . 对于普通用户来说,它们应该只是'quite'只读 . 可以改变它们,但这不是主意 .但是,如何保存最终用户首选项呢?这就是[user] .config被引入的原因(我相信.NET 2) . 官方文件说:
因此,从.NET Framework的角度来看,只有一个3层机制 .
现在,Visual Studio只是尝试为最终的读/写设置生成类型安全的代码来帮助您 . 大多数情况下,[user] .config文件不存在,设置值将由
DefaultSettingValueAttribute
(为每个设置定义)中的内容定义,或者使用's been defined statically in the app.config. That'为什么Visual Studio还会更新app.config文件您可以为设置定义静态默认值 . 但你可以完全删除所有app.config的东西 .它们用于不同的目的 . 设置API提供应用程序的读/写访问权限,而配置是只读的(除非您在代码中编写文件) .
可以按用户或每个应用程序定义设置,并且设计为易失性 . 用户设置将写入UAC允许的用户配置文件存储中的隐藏文件夹 .
App.config仅适用于每个应用程序 . 不会自动获取对App.config的更改 . 它需要重新启动或代码来刷新值 . 在UAC下,不允许用户写入Program Files等应用程序目录,因此该文件应被视为静态只读 .
您可以在桌面应用程序中使用“设置”来存储用户首选项或在运行时更改的设置 .
您可以将App.config用于更通用的静态设置,例如连接字符串等,或者用于定义应用程序中使用的组件的配置 .
如果重新部署应用程序,那么它将获取新设置,除非机器上已经有用户/应用程序自定义,在这种情况下它将继续使用它们,除非您擦除它们 .
如果您添加新设置,这些将被选中 . 实际上,默认值被烘焙到Settings类中,因此即使app.config为空,“设置”仍然起作用 .