应用程序设置与应用程序设置(.NET应用程序配置/ Web配置)的优缺点

kmynzznz  于 2022-12-14  发布在  .NET
关注(0)|答案(6)|浏览(174)

在开发一个.NET Windows窗体应用程序时,我们可以在这些App.config标记中选择一个来存储我们的配置值。

<configuration>

  <!-- Choice 1 -->
  <appSettings>
    <add key="RequestTimeoutInMilliseconds" value="10000"/>
  </appSettings>

  <!-- Choice 2 -->
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
        <section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <applicationSettings>
    <Project1.Properties.Settings>
      <setting name="TABLEA" serializeAs="String">
        <value>TABLEA</value>
      </setting>
    </Project1.Properties.Settings>
  </applicationSettings>

</configuration>
vulvrdjw

vulvrdjw1#

基本的<appSettings>更容易处理--只需输入一个<add key="...." value="..." />条目就可以了。
缺点是:没有类型检查,例如,您不能安全地假设您要配置的数字确实存在-有人可能会将字符串放入该设置中.....您只需以ConfigurationManager["(key)"]的形式访问它,然后由您来了解您正在处理的内容。
此外,随着时间的推移,如果你的应用程序的很多部分开始在那里放东西,<appSettings>可能会变得相当复杂和混乱(还记得旧的windows.ini文件吗?:-))。
如果可以的话,我建议您使用自己的配置部分-使用.NET 2.0,这真的变得非常容易,这样,您就可以:

  • a)在代码中定义配置设置,并使其类型安全并经过检查
  • B)你可以把你自己的设置和其他人的区分开来,你也可以重用你的配置代码!

有一系列非常好的文章介绍如何在CodeProject上揭开.NET 2.0配置系统的神秘面纱:

  1. Unraveling the mysteries of .NET 2.0 configuration
  2. Decoding the mysteries of .NET 2.0 configuration
  3. Cracking the mysteries of .NET 2.0 configuration
    强烈推荐!Jon Rista在解释.NET 2. 0中的配置系统方面做得很好。
lx0bsm1f

lx0bsm1f2#

应用程序设置可以从设计器中控制(默认情况下通常有一个Settings.settings文件),因此更易于修改,并且可以通过Settings类以编程方式访问这些设置,在Settings类中,这些设置看起来像强类型属性。您还可以具有应用程序和用户级别设置,以及用于回滚的默认设置。
这是从.NET 2.0开始提供的,并反对其他的方法(据我所知)。
详情请参阅:msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

ttcibm8c

ttcibm8c3#

要了解app.config中设置的优点缺点,我建议您查看两者的技术细节。我提供了一些链接,您可以在其中找到处理的源代码,下面描述了更多的技术细节。
让我简要总结一下我在使用它们时所认识到的东西(**注意:**同样适用于网站/ Web应用程序的web.config文件):

**一个

  • (单击上方查看源代码和技术详情)*
    优点
  • 它们允许存储类型化数据,包括对象类型(通过serializeAs属性)
  • 它们具有用户和应用程序范围,允许存储默认值
  • 它们在VisualStudio的配置部分中受支持
  • 非常好地支持长字符串和/或带有特殊字符的数据(例如,包含双引号的嵌入式JSON字符串)
    缺点
  • 用户设置存储在用户配置文件中的不同位置(使用隐式路径),可能难以清理
  • 应用程序范围设置在应用程序运行时是只读的(在运行时只能更改用户范围设置)
  • 由Visual Studio的设置设计器生成的读/写方法代码,而不是由第三方工具直接提供的(有关变通解决方案,请参见上面的链接)
    **第一个e第一个f第一个x
    更新:AppSettings in .NET Core
  • (单击上方查看源代码和技术详情)*
    优点
  • “重量轻”,即易于操作
  • 应用程序运行时的读写访问权限
  • 管理员可以在中轻松编辑它们
    Internet信息服务(IIS)管理器

(功能视图-〉应用程序设置,请注意图标的名称会引起误解,因为它只能处理AppSettings而不能处理ApplicationSettings)

缺点

  • 仅支持字符串数据;字符串长度和特殊字符是有限的
  • 它们没有用户范围
  • 它们不支持默认值
  • Visual Studio的配置节中不直接支持
5jdjgkvh

5jdjgkvh4#

我一直在使用一个模式,我发现了一段时间回来,你使用基本的xml标签,但 Package 在一个静态配置类的设置。所以-一个DIY的App. Settings。
DotNetPearls Static Config Pattern
如果这样做,您可以:

  • 对不同的环境(开发、测试、生产)使用不同的配置值集
  • 为每个设置提供合理的默认值
  • 控制如何定义和示例化值

它的设置很繁琐,但是运行良好,隐藏了对键名的引用,并且是强类型的,这种模式对于应用程序不更改的配置很有效,尽管你也可以支持更改。
配置:

<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />

<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />

<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />

配置类:

using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;

    public static class Config
    {
        #region Properties

        public static string EnvironmentType { get; private set; }

        public static Uri RootURL { get; private set; }

        public static string HumanReadableEnvType { get; private set; }

        #endregion

        #region CTOR

        /// <summary>
        /// Initializes all settings when the app spins up
        /// </summary>
        static Config()
        {
            // Init all settings here to prevent repeated NameValueCollection lookups
            // Can increase performance on high volume apps

            EnvironmentType =
                WebConfig.AppSettings[System.Environment.MachineName] ??
                "Dev";

            RootURL =
                new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);

            HumanReadableEnvType =
                WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
                string.Empty;
        }

        #endregion
    }
qcbq4gxm

qcbq4gxm5#

我喜欢使用更简单的版本来存储和访问单个值。

<appSettings>
    <add key="MyConfigKey" value="true"/>
</appSettings>

我写了一个实用程序类,以允许默认值的类型安全方式访问值。如果没有提供默认值,则会给出有用的异常消息。
您可以在此处查看/下载该课程:
http://www.drewnoakes.com/code/util/app-settings-util/

yqhsw0fo

yqhsw0fo6#

使用ApplicationSettings的一大好处是,应用程序可以通过ClickOnce部署,如this page中所述。
基本上,如果设置的类型为“用户”,并且已修改了其默认值,则它将在每次更新时保持修改状态。如果设置的类型为“应用程序”,则在更新应用程序时将自动覆盖它。
另外,在VB.NET中,ApplicationSettings可以通过简单地使用My.Settings.来访问,这使得它成为从GUI的Angular 来看最简单的可用设置配置。

相关问题