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方法的人的示例:
从我的观点来看,"设置文件"方法有以下优点:
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具有巨大的优势.