为什么人们一直建议使用AppConfig的,而不是使用的设置文件? (。净)(Why do pe

2019-07-29 00:01发布

很多时候,我看到了答案,如问题:“我应该如何储存在我的.net应用程序设置” 是通过手动将条目添加到的app.config(或web.config中),像这样编辑app.config文件:

<configuration> 
  <appSettings>
    **<add key="ConfigValueName" value="ABC"/>**
  </appSettings>
</configuration>

然后,访问它们,如:

string configValue = Configuration.AppSettings["ConfigValueName"];

我将把上述的“的app.config”的方式方法。 极少数情况下才能看到的人建议增加一个“设置”文件到该项目。 我已经看到了这个在网络和计算器上这么多次...我开始怀疑,如果我失去了一些东西......因为我不知道为什么你会使用这种方法比使用“设置“文件。 我没有进入.NET直到VS2005这样一个理论我是这件事是如何在VS2003和人民永远不会做切换?

人们建议在app.config方法的例子:

  • 有一个配置文件,在Windows最简单的办法窗体C#应用程序
  • 最佳实践:我应该如何存储在C#(格式/类型)设置?

从我的观点有以下的“设置文件”的方法的优点:

  1. 可用于从相同的接口都应用程序设置(那些通用于所有用户)和用户设置。
  2. 能够使用Visual Studio中的设置设计器支持。 不容易出错,然后编辑XML文件直接恕我直言。
  3. 重构 - 您可以重命名一个特定的设置名称,它会自动更新您的代码引用。
  4. 编译类型检查。
  5. 自动完成支持。
  6. 财产网格功能。 我发现,PropertyGrid控件是一个非常简单的方法,使一个快速表单选项。 你只是做propertyGrid1.SelectedObject = Settings1.Default; 就大功告成了。

如果你不知道我的意思是按“设置”文件的方法是什么看到这个帖子是为数不多的例子,其中有人建议使用设置文件,而不是app.confg之一。

编辑:请明白:这个主题的目的是要弄清楚人们为什么会使用上面在设置文件的方法概括在app.config方法。 我所遇到的设置文件方法的局限性,并已被迫卷起有时自己的定制解决方案。 这是一个完全不同的讨论

Answer 1:

我认为,两者之间最大的区别是,在应用程序不能更改值app.config 。 这些值在运行时读取,并有写新值的配置文件没有内置的支持。

设置文件可以使用来改变Save()命令。

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

每当你发布一个新版本,它不会因为设置文件的存储位置的以前版本的定位设置文件。 但也没有办法改变设置文件的存储位置。

我用它在一个项目中,发现它有用得多创建使用了设置的XML文件,我自己的AppSettings类。 我有过的文件的格式和位置控制。



Answer 2:

还有第三个,很多,比任何的AppSettings或性能更好的办法: 自定义配置节 。 优于的AppSettings:

1)强类型的访问

2)内置在用于模式和形式都验证机制。

3)基于POCO使其具有很高的测试 - 只是新了自己的测试配置。

4)魔术字符串无依赖。 这并不是说你不能轻易换的AppSettings在一个类和访问这样的说法,但开发商95%的人不。

5)一旦你到十几设置XML在配置变得更加易懂。 也更理解比Propterties位恕我直言。

6)在Visual Studio中无依赖,使其正常工作。

当然,我从来没有真正使用性质,因为我得到了我的手,自定义配置节第一。

顺便说一句,如果你还没有听说过这些,你仍然在使用他们每天 - 您如何看待在.NET配置文件是标准配置的部分?

_____CLAIRIFICATION SECTION

首先,这样做的散装旨在对AppConfig的方法,并重新阅读中,我并不清楚。 我认为,我们一般是在同一侧 - 避免配置宽松名称值袋子,因为它太容易坏掉。 我还要补充一点,我是一个网络的家伙,所以用户设置的东西,住在应用层,而不是在配置,给我。

1)的确,这两个属性和自定义配置部分有强类型的访问。 AppSettings的没有。 AppSettings的不好,道具/ CC不错。

2)当加载配置部分,应用程序将抛出配置异常,如果它不公开必要的信息或不正当的信息。 同样的,当你弄脏了的app.config或web.config中的。 还有就是我没有用过,因为我喜欢故障的硬盘和早期或者根本没有多一点的验证基础架构。

3)POCO是万一有人普通的老C#对象错过了最后几年。 总之,由于配置设置的装饰,并通过属性声明,你的配置设置,可以很容易地测试,因为你只需要delcate新MyConfigSection()和设置属性等酌情。 据我了解性能,你需要在它的右侧XML具有的配置文件中有或者你是溶胶。 另一个优点是自定义配置部分与所有其他奇妙的东西,你可以用做波苏斯一样,接口和依赖注入工作。

4)诚然,这两个属性和自定义配置部分是强类型,AppSettings的都没有。 AppSettings的不好,道具/ CC不错。

5)真正瞄准的AppSettings。 我继承了一些应用程序与litterally 2页的<add name="foo" value="bar" />在config。 相比于XML jibberish是性能吐出这很容易。 在另一方面,您的自定义配置部分可以是相当的语义和自我explanitory因为你在声明节的名称和属性。 我可以在记事本中很容易地编辑在生产服务器上,而不是过于紧张在紧要关头,拍摄自己的脚。

因此,不具有基于VS-属性网格外(我会争辩是一件坏事 - 为什么你需要一格编辑配置),自定义配置部分有很多的优势,相对于性能没有真正的缺点。 这两个自定义配置部分和属性有超过AppSettings的巨大的优势。



Answer 3:

如果没有讨论,那么答案是:

“因为它更容易。”



Answer 4:

两种方案:

  • 它随设置为默认值的配置设置的客户端应用程序。 该应用程序提供了一个用户界面,修改设置为单个用户或所有用户。

这里的“设置”的做法胜手了。

  • 由其中的每一个几个相对独立的组件的应用程序需要几个简单的配置设置。 该设置通常由管理员设置的,而不是通过一次部署的应用程序进行修改。

在这里“的appSettings”可以更易于管理。 随着“设置”的方式,将有被添加到主应用程序的配置文件,为每个可配置组件的部分。



Answer 5:

因为设置文件基础设施(1)更复杂的和(2)不充分地载入文件给出其复杂性。

设置文件默认情况下的工作方式对于小型应用。 对于更大的那些你经常需要更改此默认。 设置文件的基础设施可以利用,以您的需求,但有涉及,即使有良好的文档陡峭的学习曲线。 如果没有文件,这是接近无用。

我指的这个文章得出结论。 随意粘贴到概念MSDN文档一些有用的链接反驳我的观点。


更新:

我需要的是公平和供应,我没有找到记录具体的使用情况:

我喜欢的应用程序设置设计师。 我也很喜欢的存储设置的XML格式。 我想保留这些功能,但使用其他位置在哪里存储设置。 我没有找到任何暗示这种使用情况是否支持,如果是,如何完成任务。



Answer 6:

不正确:与设置文件方法的问题之一是,它需要的应用程序是在一个特定的地方,并设置文件是在正确的位置。 如果其中一个被意外移动,则设置可能会丢失为好,一样的,如果它被删除。 也有可能存在的与文件夹同名的多个设置文件的问题,造成一个被覆盖。 这是特别坏,如果该软件是依赖于设置文件。 这些问题几乎一样明显不能与已安装的软件,但软件没有安装,而只是下载并运行它可能是一个主要问题。 试想一下,如果有人下载了几个这样的方案,以同一个目录,它们都使用相同的设置文件名。

编辑:至于谁问这个问题的人讨论,这个答案是不正确,因为这个问题指的是保存到一个设置文件的两种不同的方式。 当我给我的回答,我在想,他指的是两个不同的文件。 关于唯一的其他答案,我可以提供的是,这是个人喜好的问题。



Answer 7:

我还想指出的app.config和设置窗口的区别之一。 如果保存任何设置下,则设置将被保存在以下位置。

Win XP的:C:\ Documents和Settings \%USERNAME%\本地设置\应用数据{出版商名称} \

Win 7的:C:\用户\%用户名%\应用程序数据\本地{出版商名称} \

虽然在app.config设置仅在配置文件保存在。



文章来源: Why do people consistently recommend using appConfig instead of using Settings files? (.NET)