我实际上正处于与.NET相关的知识的学习阶段,并且正在探索如何保存应用程序。我最终编写了自己的类,该类将设置保存在XML文件中,然后发现.NET本身支持保存应用程序设置。
但是我发现了两种方法。当我在Visual Studio 2008中打开“添加新项”对话框时,它提供了创建设置文件(.settings)或配置文件(.config)的选项。两者之间的区别是什么?在什么情况下应使用它们?
Answers:
更新:在ASP.NET Core Land中,不再通过这两种方法中的任何一种来管理配置-请参见Travis Illig撰写的精彩文章Microsoft.Extension.Configuration
,Microsoft.Extensions.Configuration.Binder
其中az处于启用状态,并且实际上是所有这些的超集
设置(来自.settings set和Configuration.AppSettings
)都存储在.config文件中[以及许多其他内容]。
区别在于.settings东西(在.NET 2.0 / VS2005中添加的)在一组属于一起的设置之上分层了一个强类型化的类,而Configuration.AppSettings
只允许您检索字符串,强迫您进行任何转换,而不会有默认值的概念。(Configuration类实际上已经被分拆到了一个侧面程序集中以反映这一点-如果需要,您需要显式添加对System.Configuration的引用)。
如果您尚未添加.settings到您的项目中,则会导致添加一个app.config来容纳这些设置。每次更改组件/应用程序的设置列表时,都会自动生成读取设置的类。
.Settings的其他功能是可以将某些设置指定为用户特定的功能(也可以通过一次调用保存用户特定的设置)。
使用.Settings的最好理由通常是,您可以通过遵循属性的用法(在XML文件中每个集合都是一个单独的块)来清楚地标识谁在代码库中使用哪个设置。Configuration.appSettings
从本质上讲更具全局性-它只是一袋属性,您不知道哪个DLL,子系统或类取决于特定的设置条目。有关更多信息,请参见Steven Smith的博客文章。
最后,如果您对设置管理的了解还不够多,那么您就不会因为内容完整或想法和角度过多而在Rick Strahl上发表过这篇文章。
旁白:本文还概述了ASP.NET vNext Configuration内容,该内容非常灵活,并且在配置设置管理方面提供了不同的角度。
.settings
文件仅定义了架构,并被编译为代码隐藏。实际值存在于.config
文件中,该文件将位于用户配置文件目录中(非用户不可写)。数据与放置在同一位置ConfigurationManager.AppSettings
,只是采用自定义格式并具有更强的键入功能。您可以做类似的事情,ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal ).FilePath
但是在我告诉您之前...。为什么?
设置文件是一个资源文件,您可以在其中指定不同的设置及其默认值。
这些值本身是在应用程序配置文件(.config文件)中配置的。
永远不会部署设置文件,因此您将需要配置文件来进行配置。
app.config文件存储在与应用程序相同的目录中。普通用户将没有写权限(例如,在“程序文件”中)。
设置文件应存储在用户“ AppData”目录中(他具有读写权限)。
因此,请使用设置文件中的用户可配置选项。
.settings
(和Visual Studio的Settings
支持),可以一次性应用程序配置和每个用户的配置均可使用。.settings
在运行时不存在;运行时存在的内容app.config
位于app文件夹中,而[user].config
位于用户的数据文件夹中。