Possible Duplicate:
What is the difference between app.config file and XYZ.settings file?

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.configSettings.settings最常见的场景是什么,反之亦然?
  • 如果我的应用程序使用Settings.settings,并且在部署后更改了app.config中的值,会发生什么?由于Settings.settings的同步已经被编译和分发,因此无法进行同步.

笔记我一直在寻找关于这个话题的问题,但我更困惑了.例如,this question here的答案是相当矛盾的,没有多少启发.

注2.我知道app.config是一个设计时文件名,我熟悉Visual Studio复制并将其重命名为可执行文件夹的动态过程.

推荐答案

从一个.NET Framework的观点(暂时不提工具——Visual Studio),历史上只有[app.exe].config个(事实上,AppDomain将其定义为配置文件.名称由AppDomain定义,这就是为什么web应用程序的名称为web.config…)和machine.config."app'与应用程序一起部署,"machine"用于整个机器.对于普通用户来说,它们应该是"相当"只读的.改变它们是可能的,但这不是我们的 idea .

但是,我如何才能保存最终用户首选项呢?这就是引入[user].config的原因(我相信是在.NET2中).官方文件是这样说的:

最初随发布的配置系统.网

1) 应用程序范围的设置可以存储在任何一台机器中.配置

2) 用户范围的设置可以存储在应用程序中.exe.配置文件,其中

3)将非默认用户范围设置存储在新文件中, user.config,其中user是当前人员的用户名 执行应用程序.您可以为用户范围的 使用DefaultSettingValueAttribute设置.因为用户作用域 设置经常在应用程序执行期间更改,user.config是 始终读/写.

所以从一个.NET框架的Angular 来看,只有一个三层机制.

现在,VisualStudio只是试图通过为最终读/写设置生成类型安全代码来帮助您.大多数时候,那个[用户].配置文件不存在,设置值将由DefaultSettingValueAttribute中的值定义( for each 设置定义),或使用应用程序中静态定义的值.配置.这就是为什么VisualStudio也会更新这个应用程序.配置文件,以便您可以定义设置的静态默认值.但你完全可以删除所有的应用程序.配置的东西.

.net相关问答推荐

节省用户在整个应用程序中使用的Flutter

在 .NET 中使用 AES 解密时缺少后半字节

判断 Windows 路径中是否存在可执行文件

如何在任务栏顶部全屏显示 Windows 窗体?

为什么循环引用被认为是有害的?

生产代码中的 System.Diagnostics.Debug.WriteLine

托管和非托管代码、内存和大小有什么区别?

HttpClient 和使用代理 - 不断得到 407

将接收到的对象转换为 List 或 IEnumerable

从 Windows 窗体打开 URL

如何将 XPath 与 XElement 或 LINQ 一起使用?

如何从头开始以编程方式配置 log4net(无配置)

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

如何将整个字符串与正则表达式匹配?

如何向 C# Winforms 中的标签添加提示或工具提示?

C# 应用程序中的全局键盘捕获

表单不响应 KeyDown 事件

从 Visual Studio 2015 发布 - 允许不受信任的证书

通过反射获取公共静态字段的值

从 bcp 客户端接收到 colid 6 的无效列长度