【问题标题】:What is the difference between app.config file and XYZ.settings file?app.config 文件和 XYZ.settings 文件有什么区别?
【发布时间】:2010-10-28 22:10:17
【问题描述】:

我实际上正处于 .NET 相关内容的学习阶段,我正在探索如何保存应用程序。我最终编写了自己的类,将设置保存在 XML 文件中,然后我发现 .NET 本身支持保存应用程序设置。

但我找到了两种方法来做到这一点。当我在 Visual Studio 2008 中打开添加新项目对话框时,它提供了创建设置文件 (.settings) 或配置文件 (.config) 的选项。两者有什么区别,应该在什么场景下使用?

【问题讨论】:

    标签: .net configuration settings appsettings


    【解决方案1】:

    更新:在 ASP.NET Core Land 中,不再通过其中任何一个管理配置 - see this fantastic writeup from Travis Illig with the a-z on Microsoft.Extension.Configuration and Microsoft.Extensions.Configuration.Binder which are effectively a superset of all this


    设置(来自 .settings 集和 Configuration.AppSettings)存储在 .config 文件中[以及许多其他内容]。

    不同之处在于 .settings 东西 [在 .NET 2.0 / VS2005 中添加] 在一组属于一起的设置之上分层了一个强类型类,而 Configuration.AppSettings 只允许您检索字符串,迫使您进行任何转换,并且没有默认值的概念。 (Configuration 类实际上已被分流到一个侧面程序集中以反映这一点 - 如果需要,您需要显式添加对 System.Configuration 的引用)。

    将 .settings 添加到您的项目将导致添加一个 app.config 来容纳设置(如果您还没有设置)。每次更改组件/应用程序的设置列表时,都会自动生成读取设置的类。

    .Settings 的其他功能是能够将某些设置指定为特定于用户的设置(并且还可以通过一次调用保存用户特定的设置)。

    使用 .Settings 的最佳理由通常是您能够通过遵循属性的用法(并且每个集合都是 XML 文件中的一个单独的块)来清楚地识别代码库中谁在使用哪个设置。 Configuration.appSettings 在本质上更具全局性——它只是一个属性包,您不知道哪个 DLL、子系统或类取决于特定的设置条目。请参阅this blog post from Steven Smith 了解更多信息。

    最后,如果您对设置管理的了解还不够多,那么您将无法在完整性或大量想法和角度方面击败 this Rick Strahl post on the subject

    旁白:还有ASP.NET vNext Configuration 的东西,outlined in this article,它非常灵活,提供了不同的配置设置管理角度。

    【讨论】:

    • 感谢您的回答。只是对一点感到困惑:有两种设置。一个是应用程序设置,另一个是用户设置。如果两种类型的设置都存储在配置文件中,不同用户的用户设置会有什么不同?
    • 抱歉没有提及。用户设置是存在默认值的原因之一(如果用户尚未使用该应用程序,则在保存更改之前应用默认值)。用户设置存储在用户配置文件 (Users\XXX) 目录中的单独配置文件中。用户设置也可以更新(系统设置不能使用默认 API,也不应该 - 它们存在于 Program Files 中,并且无法安全地控制多个用户对那里的访问。)
    • 配置管理器在哪里适合这一切?我试图告诉我我的 settings.settings 住在哪里,但没有成功,然后在那里保存一个空白配置
    • @JonnyLeeds 不确定您的意思,所以我将尝试扩展以查看它是否对您有帮助....您的 .settings 文件只是定义了架构并编译为代码隐藏。实际值存在于.config 文件中,该文件将位于用户配置文件目录中(非用户文件不可写)。数据与ConfigurationManager.AppSettings 所说的位于同一个位置,它只是采用自定义格式,具有更强的键入能力。你可以做ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal ).FilePath 之类的事情,但在我告诉你之前......为什么?
    • @RubenBartelink 感谢您的回复。这几乎就是我得出的结论——刚刚发布了一个问答来记录我的痛苦here
    【解决方案2】:

    设置文件是一个资源文件,您可以在其中指定不同的设置及其默认值。

    值本身在应用程序配置文件(.config 文件)中配置。

    永远不会部署设置文件,因此您需要配置文件来进行配置。

    【讨论】:

    • 当我处于挑剔模式时(刚刚更新了我自己的帖子 - 那里缺少很多内容)虽然 .settings 文件是一个 XML 文件,但我有理由确定它不会作为资源被捆绑,是吗?此外,用户特定的值存储在 .config 文件之外的单独区域中。如果您有非默认设置,则需要部署 .config 文件(如果配置文件中未指定任何内容,则生成的设置类中的属性管理值的默认设置。)
    • 虽然未部署 Settings.settings xml 文件,但 Settings.Designer.cs 文件已编译到应用程序中,不是吗?
    【解决方案3】:

    app.config 文件与应用程序存储在同一目录中。普通用户将没有写入权限(例如在“程序文件”中)。

    设置文件应该存储在用户的“AppData”目录中(他有读/写权限)。

    所以使用设置文件来获得用户可配置的选项。

    【讨论】:

    • 不太正确,根据其他答案:stackoverflow.com/a/909712/199364stackoverflow.com/a/13072966/199364.settings(以及 Visual Studio 的Settings 支持)可用于一次性应用程序配置和每个用户配置。 .settings 在运行时不存在;运行时存在的是应用文件夹中的app.config,以及用户数据文件夹中的[用户] .config
    猜你喜欢
    • 2020-08-19
    • 2011-05-22
    • 2010-10-26
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多