为什么人们一直建议使用appConfig而不是使用设置文件?(.净)

bla*_*k3r 28 .net app-config appsettings application-settings .net-2.0

我经常看到问题的答案如下:"我应该如何在我的.NET应用程序中存储设置?" 是通过手动将条目添加到app.config(或web.config)来编辑app.config文件,如下所示:

<configuration> 
  <appSettings>
    **<add key="ConfigValueName" value="ABC"/>**
  </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后,访问它们像:

string configValue = Configuration.AppSettings["ConfigValueName"];
Run Code Online (Sandbox Code Playgroud)

我将上面概述的方法称为"app.config"方法.我很少看到人们建议在项目中添加"设置"文件.我已经在网络上和堆栈溢出中看到了这么多次...我开始怀疑我是否遗漏了某些东西......因为我不确定为什么你使用这种方法而不是使用"设置" "档案.我没有进入.NET直到VS2005所以我有一个理论是这是VS2003中的事情是如何完成的,人们从未切换过?

推荐app.config方法的人的示例:

从我的观点来看,"设置文件"方法以下优点:

  1. 可用于同一界面的"应用程序设置"(所有用户通用的设置)和"用户"设置.
  2. 能够在visual studio中使用设置设计器支持.不易出错,然后直接编辑XML文件恕我直言.
  3. 重构 - 您可以重命名特定的设置名称,它将自动更新代码中的引用.
  4. 编译类型检查.
  5. 自动完成支持.
  6. 属性 - 网格功能.我发现PropertyGrid控件是一种非常简单的方法来制作快速选项表单.你做的propertyGrid1.SelectedObject = Settings1.Default;就是你已经完成了.

如果您不确定"设置"文件方法的含义,请参阅此帖子,这是有人建议使用设置文件而不是app.confg的少数示例之一.

编辑:请理解:本主题的目的是弄清楚为什么人们会使用上面概述的app.config方法而不是设置文件方法.我遇到了设置文件方法的限制,并且有时被迫推出自己的自定义解决方案.这是一个完全不同的讨论.

Chr*_*son 22

我相信两者之间的最大区别是应用程序无法更改值app.config.这些值在运行时读取,并且没有内置支持将新值写入配置文件.

可以使用该Save()命令更改设置文件.

内置支持设置文件的一个主要问题是存储设置文件的位置.如果你查看你的APPDATA文件夹,你会看到有一个公司名称的文件夹,然后是一个带有产品名称的子文件夹,然后是一个带有半随机名称和版本信息的子文件夹.

每当您发布新版本时,由于存储设置文件的位置,它将无法找到先前版本的设置文件.也无法更改存储设置文件的位置.

我在一个项目中使用它,发现创建我自己的AppSettings类使用XML文件进行设置更有用.我可以控制文件的格式和位置.


Wya*_*ett 13

与AppSettings或Properties:自定义配置部分相比,第三种方法要好得多.AppSettings的优势:

1)强类型访问

2)架构和表单的内置验证机制.

3)基于POCO使其高度可测 - 只需新建一个自己的测试配置.

4)不依赖魔术弦.并不是说你不能轻易地将AppSettings包装在一个类中并以这种方式访问​​它,但95%的开发人员都没有.

5)一旦你进入十几个设置,配置中的XML变得更加容易理解.也比IMHO的Propterties位更容易理解.

6)不依赖视觉工作室使其运作良好.

当然,我从未真正使用过属性,因为我首先得到了自定义配置部分.

顺便说一下,如果您还没有听说过这些,那么您每天仍在使用它们 - 您认为.NET配置文件中的标准配置部分是什么?

_____程序部分

首先,其中大部分是针对AppConfig方法,重新阅读我不清楚.我认为我们通常都在同一方面 - 避免使用松散的名称值包进行配置,因为它太容易破坏了.我还应该补充一点,我是一个网络人,所以用户设置是存在于应用程序层中的东西,而不是配置中的东西.

1)没错,属性和自定义配置部分都具有强类型访问权限.AppSettings没有.AppSettings不好,道具/ CC好.

2)当您加载配置节时,如果应用程序没有公开必要的信息或不正确的信息,它将抛出配置异常.与粘贴app.config或web.config时相同.还有一些我没有使用过的验证基础设施,因为我喜欢早期或者根本没有失败.

3)POCO是一个普通的老C#对象,以防有人错过了最近几年.无论如何,因为配置设置是装饰性的并且通过属性声明,所以您可以轻松测试配置设置,因为您只需要根据需要指定新的MyConfigSection()并设置属性等.据我了解属性,您需要在其中包含正确的xml配置文件,否则您就是sol.其他优点是自定义配置部分可以处理您可以使用POCO完成的所有其他整洁的东西,例如接口和依赖注入.

4)没错,属性和自定义配置部分都是强类型的,AppSettings则不是.AppSettings不好,道具/ CC好.

5)真正针对AppSettings.我已经<add name="foo" value="bar" />在配置中继承了一些带有2页的应用程序.与属性吐出的xml jibberish相比,这很容易.另一方面,您的自定义配置部分可能是相当语义和自我解释,因为您声明了部分名称和属性.我可以很容易地在生产服务器上的记事本中编辑它,并且不要太紧张在脚捏中拍摄自己.

因此,除了没有基于VS的属性网格(我认为这是一件坏事 - 为什么你需要一个网格来编辑配置?)之外,自定义配置部分与Properties相比具有很多优点并且没有真正的缺点.自定义配置部分和属性都比AppSettings具有巨大的优势.