2009-05-26 6 views
67

Je suis actuellement dans la phase d'apprentissage de choses liées à .NET et j'explorais comment sauvegarder l'application. J'ai fini par écrire ma propre classe qui enregistre les paramètres dans un fichier XML, puis j'ai constaté que .NET lui-même prend en charge l'enregistrement des paramètres de l'application.Quelle est la différence entre le fichier app.config et le fichier XYZ.settings?

Mais j'ai trouvé 2 façons de le faire. Lorsque j'ouvre une boîte de dialogue d'ajout d'un nouvel élément dans Visual Studio 2008, cela donne l'option de créer un fichier de paramètres (.settings) ou un fichier de configuration (.config). Quelle est la différence entre les deux et dans quel scénario ils devraient être utilisés?

Répondre

51

Les paramètres (à partir d'un ensemble .settings et Configuration.AppSettings) sont stockés dans le fichier .config [avec beaucoup d'autres éléments]. La différence est que le composant .settings [qui a été ajouté dans .NET 2.0/VS2005] superpose une classe fortement typée au-dessus d'un ensemble de paramètres qui lui sont associés alors que Configuration.AppSettings vous permet simplement de récupérer des chaînes, ce qui vous oblige à faire toutes les conversions, et n'a pas la notion de défauts. (La classe Configuration a été redirigée vers un assembly latéral pour refléter cela - vous devez ajouter explicitement une référence à System.Configuration si vous le souhaitez). Si vous ajoutez un paramètre .settings à votre projet, un app.config sera ajouté pour héberger les paramètres si vous n'en avez pas déjà un. La classe qui lit les paramètres est automatiquement générée chaque fois que vous modifiez la liste des paramètres de votre composant/application.

Autres fonctionnalités de .Settings est la possibilité de désigner certains paramètres spécifiques à l'utilisateur (et également d'enregistrer les paramètres spécifiques à l'utilisateur avec un seul appel). La meilleure raison d'utiliser .Settings est généralement que vous avez la possibilité d'identifier clairement qui utilise quel paramètre dans une base de code en suivant les utilisations des propriétés (et chaque ensemble est un bloc distinct dans le fichier XML) . Configuration.appSettings est plus global dans sa nature - c'est juste un sac de propriétés et vous ne savez pas quelle DLL, sous-système ou classe dépend d'une entrée de paramètre particulier. Voir this blog post from Steven Smith pour beaucoup plus. Enfin, si vous n'avez toujours pas assez lu sur la gestion des paramètres, vous n'allez pas battre this Rick Strahl post on the subject pour l'exhaustivité ou la quantité d'idées et d'angles. Il y a aussi le ASP.NET vNext Configuration, outlined in this article qui est assez flexible et offre un angle différent sur la gestion des paramètres de configuration.

+0

Merci pour la réponse. Juste confus à propos d'un point: Il existe 2 types de paramètres.L'un est le réglage de l'application et l'autre est le réglage de l'utilisateur. Si les deux types de paramètres sont stockés dans le fichier de configuration, en quoi les paramètres utilisateur seront-ils différents pour les différents utilisateurs? – Hemant

+2

Désolé d'avoir omis de mentionner cela. Les paramètres utilisateur sont l'une des raisons pour lesquelles les paramètres par défaut existent (si l'utilisateur n'a pas encore utilisé l'application, les paramètres par défaut s'appliquent jusqu'à ce qu'une modification soit enregistrée). Les paramètres utilisateur sont stockés dans un fichier de configuration distinct dans le répertoire de profil de l'utilisateur (Users \ XXX). Les paramètres utilisateur peuvent également être mis à jour (ceux du système ne peuvent pas utiliser l'API par défaut et ne doivent pas l'être - ils résident dans Program Files et il n'est pas possible de contrôler en sécurité plusieurs utilisateurs.) –

+0

où le gestionnaire de configuration s'adapte-t-il à tout cela? Im essayant et ne pas obtenir cela pour me dire où mon settings.settings vit et puis enregistrer une config vide là –

3

Un fichier de paramètres est un fichier de ressources dans lequel vous spécifiez les différents paramètres et leur valeur par défaut.

Les valeurs elles-mêmes sont configurées dans le fichier de configuration de l'application (fichier .config).

Un fichier de paramètres n'est jamais déployé, vous aurez donc besoin du fichier de configuration pour effectuer la configuration.

+0

Alors que je suis en mode picky (juste mis à jour mon propre message - lots manquants là) Alors qu'un fichier .settings est un fichier XML, je suis raisonnablement sûr que ce n'est pas comme une ressource, n'est-ce pas? En outre, les valeurs spécifiques à l'utilisateur sont stockées dans une zone distincte, en dehors du fichier .config. Le fichier .config doit être déployé si vous avez des paramètres non définis par défaut (les attributs de la classe de paramètres générés gèrent la valeur par défaut des valeurs si rien n'est spécifié dans le fichier de configuration.) –

+0

Bien que le fichier xml Settings.settings ne soit pas t déployé, le fichier Settings.Designer.cs est compilé dans l'application, n'est-ce pas? –

0

Le fichier app.config est stocké dans le même répertoire que l'application. Les utilisateurs normaux n'auront pas d'autorisations d'écriture (par exemple dans "Program Files").

Le fichier de paramètres doit être stocké dans le répertoire "AppData" de l'utilisateur (où il dispose d'autorisations de type r/w). Par conséquent, utilisez le fichier de paramètres pour les options configurables par l'utilisateur.

+0

Pas tout à fait raison, selon d'autres réponses: https://stackoverflow.com/a/909712/199364, https://stackoverflow.com/a/13072966/199364 '.settings' (et le support' Paramètres' de Visual Studio) peut être utilisé à la fois pour une configuration d'application unique et une configuration par utilisateur. '.settings' n'existe pas au moment de l'exécution; Ce qui existe à l'exécution est 'app.config' dans le dossier de l'application, et [user]' .config' dans le dossier de données de l'utilisateur. – ToolmakerSteve

Questions connexes