Les avantages et les inconvénients des candidatures par rapport aux candidatures (.net app.config / Web.config)

lors du développement d'une Application .net Windows Forms, nous avons le choix entre ces balises App.config pour stocker nos valeurs de configuration. Lequel est le mieux?

<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>
152
demandé sur Matt 2009-01-20 14:38:38

5 réponses

le <appSettings> de base est plus facile à traiter - il suffit de mettre dans un <add key="...." value="..." /> entrée et vous avez terminé.

l'inconvénient est: il n'y a pas de vérification de type, par exemple vous ne pouvez pas supposer en toute sécurité que votre nombre que vous vouliez configurer il y a vraiment un nombre-quelqu'un pourrait mettre une chaîne de caractères dans ce paramètre..... vous y accédez en tant que ConfigurationManager["(key)"] et c'est à vous de savoir à quoi vous avez affaire.

aussi, avec le temps, le <appSettings> peut obtenir plutôt alambiqué et désordonné, si beaucoup de parties de votre application commencent à mettre des choses là-dedans (rappelez-vous les vieilles fenêtres.fichier ini? : -)).

si vous le pouvez, je préférerais et je vous recommande d'utiliser vos propres sections de configuration - avec .NET 2.0, c'est vraiment devenu assez facile, de cette façon, vous pouvez:

  • a) Définissez vos paramètres de configuration en code et demandez - leur de les saisir. et vérifié
  • b) vous pouvez vous séparer proprement Vos réglages de tout le monde celle d'un autre. Et vous pouvez réutiliser votre code de configuration, aussi!

il y a une série de très bons articles sur vous pour démystifier le système de configuration .NET 2.0 sur Codeprojet:

  1. décoder les mystères de la configuration .NET 2.0

  2. Déchiffrer les mystères de la .NET 2.0 configuration

fortement recommandé! Jon Rista a très bien expliqué le système de configuration dans .NET 2.0.

141
répondu marc_s 2013-05-27 19:40:18

les paramètres D'Application peuvent être contrôlés à partir d'un concepteur (il y a généralement un cadre.paramètres fichier par défaut) de sorte qu'il est plus facile de modifier et vous pouvez y accéder par programme à travers la classe Paramètres où ils apparaissent comme une propriété fortement dactylographiée. Vous pouvez également avoir des paramètres au niveau de l'application et de l'utilisateur, ainsi que des paramètres par défaut pour revenir en arrière.

C'est disponible à partir de .NET 2.0 et déprécie l'autre façon de le faire (autant que je peux dire).

plus de détails sont donnés à: msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

18
répondu Peter C 2016-08-12 18:34:40

j'ai utilisé un modèle que j'ai trouvé il y a longtemps où vous utilisez des balises xml de base mais envelopper les paramètres dans une classe de configuration statique. - Un BRICOLAGE App.Paramètre.

Dotnetpears Static Config Pattern

si vous le faites de cette façon, vous pouvez:

  • utiliser différents ensembles de valeurs de configuration pour différents environnements (dev, test, prod)
  • prévoient des valeurs par défaut raisonnables pour chaque réglage
  • contrôle comment les valeurs sont définies et instanciées

il est fastidieux de configurer mais fonctionne bien, cache des références aux noms de clés, et est fortement dactylographié. Ce type de modèle fonctionne bien pour config qui n'est pas modifié par l'application, bien que vous puissiez probablement travailler en support pour les changements aussi bien.

Config:

<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 configuration:

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
répondu HAL9000 2011-03-08 22:01:02

j'aime travailler avec la version plus simple pour stocker et accéder aux valeurs uniques.

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

j'ai écrit une classe utilitaire pour accéder aux valeurs de manière sûre qui permet les valeurs par défaut. Si les valeurs par défaut ne sont pas fournies, alors des messages d'exception utiles sont donnés.

Vous pouvez voir/télécharger la classe ici:

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

9
répondu Drew Noakes 2009-06-08 06:52:05

pour comprendre les pros et cons des paramètres dans le app.config , je vous suggère d'examiner les détails techniques des deux. J'ai inclus des liens où vous pouvez trouver le code source pour la manipulation, en décrivant plus de détails techniques ci-dessous.

permettez-moi de résumer brièvement ce que j'ai reconnu lorsque j'ai travaillé avec eux ( note: la même chose est applicable au fichier web.config d'un site web / web application):


applicationSettings

(cliquez ci-dessus pour voir le code source et les détails techniques)



avantages

  • ils permettent de stocker des données dactylographiées, y compris les types d'objets (via serializeAs biens)

  • ils ont un domaine d'utilisation et d'application, permettant de stocker les valeurs par défaut

  • ils sont pris en charge dans la section de configuration de Visual Studio

  • les longues chaînes et / ou les données avec des caractères spéciaux sont très bien supportées (par exemple, les chaînes JSON intégrées contenant des doubles guillemets)



Cons

  • les paramètres de L'utilisateur sont stockés à un endroit différent dans le profil de l'utilisateur (avec un chemin cryptique), peut être difficile à nettoyer

  • les paramètres de la portée de L'Application sont en lecture seule pendant l'exécution de l'application (seuls les paramètres de la portée de l'utilisateur peuvent être modifiés pendant l'exécution)

  • Code de méthodes de lecture / écriture construit par le concepteur de paramètres de Visual Studio, non fourni directement par des outils tiers (voir le lien ci-dessus pour une solution de contournement)


AppSettings

(cliquez ci-dessus pour voir le code source et les détails techniques)



avantages

  • sont "légers", c.-à-d. faciles à manipuler

  • accès en lecture et en écriture pendant l'exécution de l'application

  • ils peuvent être édités facilement par les administrateurs dans le

    Internet Information Services (IIS) Manager

    (Vue des caractéristiques -> paramètres de L'application, notez que le nom de l'icône est trompeur puisqu'elle ne peut traiter que les applications et non les applications)



contre

  • Soutien chaîne de caractères de données; longueur de la chaîne et les caractères spéciaux sont limités

  • ils n'ont pas de l'envergure de l'utilisateur

  • ils ne supportent pas les valeurs par défaut

  • ne sont pas directement pris en charge dans la section de configuration de Visual Studio


6
répondu Matt 2018-02-06 12:46:59