164 votes

Configuration de .NET (app.config/web.config/settings.settings)

J'ai un .NET application qui dispose de différents fichiers de configuration pour le Debug et Release. E. g. le débogage de l'application.fichier de configuration des points pour un développement SQL Server qui a le débogage activé et la libération de points pour le live de SQL Server. Il y a aussi d'autres paramètres, dont certains sont différentes en debug/release.

J'utilise actuellement deux fichiers de configuration (debug.app.config et de la libération.app.config). J'ai créer un événement sur le projet qui dit si c'est une version de construire ensuite copie de la libération.app.config app.config, d'autre copie de débogage.app.config app.config.

Le problème est que l'application semble pour obtenir ses paramètres à partir des paramètres.fichier de paramètres, donc je dois ouvrir les paramètres.paramètres de Visual Studio qui l'invite à moi que les paramètres ont changé et j'ai donc accepter les modifications, enregistrez les paramètres.paramètres et à reconstruire pour qu'il utilise les paramètres corrects.

Est-il mieux/recommandé/méthode préférée pour la réalisation d'un effet similaire? Ou aussi, je l'ai approché de cette complètement faux et est-il une meilleure approche?

62voto

Portman Points 15878

La configuration peut varier au sein d'environnements doivent être stockés au niveau des machines, pas le niveau de l'application. (Plus d'info sur les niveaux de configuration.)

Ce sont les types d'éléments de configuration que je stockent généralement au niveau de la machine:

Lors de chaque environnement (développeur, d'intégration, de test, le stade, le live) dispose de ses propres paramètres dans le c:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG le répertoire, alors vous pouvez promouvoir votre code d'application entre les environnements sans aucune post-construire des modifications.

Et bien évidemment, le contenu de la machine au niveau de la CONFIG obtenir sous contrôle de version dans un autre référentiel ou une autre structure de dossier à partir de votre application. Vous pouvez faire votre .les fichiers de configuration plus de la source de contrôle convivial grâce à l'utilisation intelligente de configSource.

J'ai fait cela pendant 7 ans, sur plus de 200 ASP.NET applications à 25+ différentes entreprises. (Ne cherche pas à me vanter, je veux juste que vous sachiez que je n'ai jamais vu une situation où cette approche n'a pas de travail.)

52voto

Roman Points 481

Cela peut vous aider à certaines personnes traitent avec des Paramètres.les paramètres et l'Application.config: attention aux GenerateDefaultValueInCode attribut dans le volet des Propriétés, tout en modifiant les valeurs dans les Paramètres.les paramètres de la grille dans Visual Studio (Visual Studio 2008 dans mon cas).

Si vous définissez GenerateDefaultValueInCode à Vrai (True par défaut ici!), la valeur par défaut est compilé dans le fichier EXE (ou DLL), vous pouvez le trouver incorporés dans le fichier lorsque vous l'ouvrez dans un éditeur de texte.

Je travaille sur une application de console et si j'avais les valeurs par défaut dans le fichier EXE, la demande toujours ignoré le fichier de configuration de placer dans le même répertoire! Tout à fait un cauchemar, et aucune information à ce sujet sur l'ensemble de l'Internet.

34voto

Eric Z Beard Points 18473

Il est question ici:

http://stackoverflow.com/questions/14893/improving-your-build-process

Les fichiers de configuration venir avec un moyen de remplacer les paramètres:

<appSettings file="Local.config">

Au lieu de vérifier dans deux fichiers (ou plus), vous ne vérifiez dans le fichier de configuration par défaut, puis sur chaque machine cible, vous mettez un Local.config, avec juste la section appSettings qui a le remplace pour cette machine.

Si vous êtes à l'aide de sections de configuration, l'équivalent est:

configSource="Local.config"

Bien sûr, c'est une bonne idée pour faire des copies de sauvegarde de tous les Locaux.les fichiers de configuration à partir d'autres machines et les vérifier quelque part, mais pas comme une partie de réelles solutions. Chaque développeur met un "ignorer" sur le Local.fichier de configuration de sorte qu'il ne soit pas vérifiée, ce qui serait de remplacer tous les autres fichiers.

(Vous n'êtes pas obligé de l'appeler "Local.config", c'est juste ce que j'utilise)

14voto

Steven Williams Points 592

De ce que je lis, il semble que vous utilisez Visual Studio pour votre processus de génération. Avez-vous pensé à l’aide de MSBuild et Nant à la place ?

Syntaxe xml de nant est un peu bizarre, mais une fois que vous le comprenez, faire ce que vous avez mentionné devient assez trivial.

11voto

Magnus Points 15064

Il me semble que vous pouvez bénéficier de la s de Projet de déploiement Web Visual Studio 2005.

Avec cela, vous pouvez lui dire de mise à jour/modifier des sections de votre fichier web.config en fonction de la configuration de génération.

Jetez un oeil à cette entrée de blog de Scott Gu pour un rapide aperçu/échantillon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X