Prós e contras de AppSettings vs applicationSettings (app.net.config / Web.configuracao)

ao desenvolver uma aplicação. Net Windows Forms, temos a escolha entre as marcas App.config para guardar os nossos valores de configuração. Qual é melhor?

<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>
Author: Matt, 2009-01-20

5 answers

O básico {[[0]} é mais fácil de lidar - basta colocar uma entrada <add key="...." value="..." /> e está feito.

A desvantagem é: não há nenhuma verificação de tipo, por exemplo, você não pode assumir com segurança o seu número que você queria configurar lá realmente é um número-alguém poderia colocar um texto nessa configuração..... basta acedê-lo como ConfigurationManager["(key)"] e depois cabe-lhe saber com o que está a lidar.

Também, com o tempo, o {[[0]} pode ficar bastante complicado e confuso, se muitas partes do seu app começar colocar coisas lá (lembre-se das janelas antigas.ficheiro ini? :-)).

Se você puder, eu preferiria e recomendaria usar suas próprias seções de configuração-com. NET 2.0, ele realmente se tornou muito fácil, dessa forma, você pode:

  • a) Defina as suas definições de configuração em código e tenha-as seguras do tipo e verificado
  • B) pode separar completamente as suas configurações de todas as pessoas e podes reutilizar o teu código de configuração também!
Há uma série de bons artigos sobre si para desmistificar o sistema de configuração. Net 2. 0 no CodeProject:
  1. Desvendando os mistérios da configuração. NET 2.0

  2. Descodificar os mistérios da configuração. NET 2.0

  3. Desvendando os mistérios da configuração. NET 2.0

Muito recomendado! Jon Rista fez um ótimo trabalho explicando o sistema de configuração no. NET 2.0.
 141
Author: marc_s, 2013-05-27 19:40:18

A configuração da aplicação pode ser controlada a partir de um desenhador (normalmente existe uma configuração.configuração arquivo por padrão) para que seja mais fácil de modificar e você pode acessá-los programaticamente através da classe de configuração, onde eles aparecem como uma propriedade fortemente digitada. Você também pode ter aplicativos e configurações de nível de usuário, bem como configurações padrão para voltar.

Isto está disponível a partir do. NET 2.0 em diante e desacredita a outra maneira de o fazer (tanto quanto posso dizer).

Mais os pormenores são apresentados em: msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

 18
Author: Peter C, 2016-08-12 18:34:40

Tenho usado um padrão que encontrei há algum tempo atrás, onde você usa as marcas xml básicas, mas embrulha a configuração numa classe de configuração estática. Uma aplicação DIY.Definicao.

Padrão De Configuração Estática DotNetPearls

Se o fizeres desta maneira podes:

  • usar diferentes conjuntos de valores de configuração para diferentes ambientes (dev, test, prod)
  • prever predefinições sensatas para cada configuração
  • controlar a forma como os valores são definidos e
  • instanciado
É entediante configurar, mas tem um bom desempenho, esconde referências aos nomes das chaves e é fortemente dactilografado. Este tipo de padrão funciona bem para a configuração que não é alterado pela aplicação, embora você provavelmente poderia trabalhar em suporte para mudanças também.

Configuração:

<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" />

Classe de configuração:

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
    }
 12
Author: HAL9000, 2011-03-08 22:01:02
Gosto de trabalhar com a versão mais simples para armazenar e aceder a valores únicos.
<appSettings>
    <add key="MyConfigKey" value="true"/>
</appSettings>

Escrevi uma classe de utilidade para aceder aos valores de uma forma segura que permite os valores predefinidos. Se os valores por omissão não forem fornecidos, então as mensagens de exceção úteis são dadas.

Você pode ver / baixar a classe aqui:

Http://www.drewnoakes.com/code/util/app-settings-util/

 9
Author: Drew Noakes, 2009-06-08 06:52:05

Para compreender osprós econs das configurações em {[[0]}, sugiro que examine os detalhes técnicos de ambos. Eu incluí links onde você pode encontrar o código fonte para manusear, descrevendo mais detalhes técnicos abaixo.

Deixe-me resumir brevemente o que reconheci quando trabalhei com eles (nota: {[6] } o mesmo se aplica ao arquivo web.config de um site / web application):


ApplicationSettings
(clique acima para ver o código fonte e detalhes técnicos)

Prós

  • Eles permitem armazenar dados digitados, incluindo tipos de objetos (via serializeAs Propriedade)

  • Eles têm um usuário e escopo de aplicação, permitindo armazenar os valores padrão

  • Eles são suportados na seção de configuração do Visual Studio

  • Cordas longas e/ou os dados com caracteres especiais são muito bem suportados (por exemplo, textos JSON incorporados contendo aspas duplas)


Cons

  • As configurações do usuário são armazenadas em um lugar diferente no perfil do usuário (com um caminho críptico), pode ser difícil de limpar

  • As configurações de escopo da aplicação são apenas de leitura durante a execução da aplicação (apenas as configurações de escopo do usuário podem ser alteradas durante a execução)

  • Ler / Escrever methods code built by Visual Studio's settings designer, not directly provided by third party tools (see link above for a workaround solution)


Applsettings
(clique acima para ver o código fonte e detalhes técnicos)

Prós

  • São "leves", ou seja, fáceis de manusear

  • Acesso de leitura e escrita durante a execução da aplicação

  • Eles podem ser editados facilmente pelos administradores no
    Gestor de Serviços de Informação na Internet (IIS)
    (funcionalidades ver - > configuração da aplicação, lembre-se que o nome do ícone é enganador, uma vez que só pode lidar com aplicações e não Aplicações.)


Cons

  • Suporta apenas os dados das cadeias de caracteres; o comprimento das cadeias de caracteres e os caracteres especiais são limitados

  • Eles não têm um escopo de usuário

  • Eles não apoiam valores por omissão

  • Não são suportados directamente na secção de configuração do Visual Studio


 6
Author: Matt, 2018-02-06 12:46:59