Est-il possible de faire quelque chose comme ce qui suit dans les fichiers app.config
ou web.config
?
<appSettings>
<add key="MyBaseDir" value="C:\MyBase" />
<add key="Dir1" value="[MyBaseDir]\Dir1"/>
<add key="Dir2" value="[MyBaseDir]\Dir2"/>
</appSettings>
Je veux ensuite accéder à Dir2 dans mon code en disant simplement:
ConfigurationManager.AppSettings["Dir2"]
Cela m'aidera lorsque j'installe mon application dans différents serveurs et emplacements où je n'aurai à modifier qu'une seule entrée dans mon ensemble app.config
. (Je sais que je peux gérer toute la concaténation dans le code, mais je préfère cela de cette façon).
c#
variables
web-config
app-config
DeeStackOverflow
la source
la source
Réponses:
Bonne question.
Je ne pense pas qu'il y en ait. Je pense que cela aurait été assez bien connu s'il y avait eu un moyen simple, et je vois que Microsoft crée un mécanisme dans Visual Studio 2010 pour déployer différents fichiers de configuration pour le déploiement et le test.
Cela dit, cependant; J'ai trouvé que vous dans la
ConnectionStrings
section avez une sorte d'espace réservé appelé "| DataDirectory |". Vous pourriez peut-être jeter un œil à ce qui se passe là-bas ...Voici un morceau de le
machine.config
montrer:la source
Une alternative légèrement plus compliquée, mais beaucoup plus flexible, consiste à créer une classe qui représente une section de configuration. Dans votre fichier
app.config
/web.config
, vous pouvez avoir ceci:Ensuite, dans votre code .NET (j'utiliserai C # dans mon exemple), vous pouvez créer deux classes comme celle-ci:
Enfin, dans votre code programme, vous pouvez accéder à vos
app.config
variables, en utilisant vos nouvelles classes, de cette manière:la source
Vous pouvez accomplir en utilisant ma bibliothèque Expansive . Également disponible sur nuget ici .
Il a été conçu avec cela comme cas d'utilisation principal.
Exemple modéré (en utilisant AppSettings comme source par défaut pour l'expansion des jetons)
Dans app.config:
Utilisez la méthode d'extension .Expand () sur la chaîne à développer:
ou
Utilisez l'encapsuleur Dynamic ConfigurationManager "Config" comme suit (appel explicite à Expand () non nécessaire):
Exemple avancé 1 (utilisation d'AppSettings comme source par défaut pour l'expansion des jetons)
Dans app.config:
Utilisez la méthode d'extension .Expand () sur la chaîne à développer:
la source
Je pensais avoir vu cette question.
En bref, non, il n'y a pas d'interpolation de variable dans une configuration d'application.
Vous avez deux options
la source
Vous avez plusieurs options. Vous pouvez le faire avec une étape de construction / déploiement qui traiterait votre fichier de configuration en remplaçant vos variables par la valeur correcte.
Une autre option serait de définir votre propre section de configuration qui prend en charge cela. Par exemple, imaginez ce xml:
Vous devez maintenant implémenter cela en utilisant des objets de configuration personnalisés qui géreraient le remplacement des variables pour vous lors de l'exécution.
la source
Habituellement, je finis par écrire une classe statique avec des propriétés pour accéder à chacun des paramètres de mon web.config.
Habituellement, je fais également des conversions de type lorsque cela est nécessaire dans cette classe. Il permet d'avoir un accès typé à votre configuration, et si les paramètres changent, vous ne pouvez les éditer qu'à un seul endroit.
Habituellement, le remplacement des paramètres par cette classe est relativement facile et offre une maintenabilité beaucoup plus grande.
la source
Vous pouvez utiliser des variables d'environnement dans votre
app.config
pour ce scénario que vous décrivezEnsuite, vous pouvez facilement obtenir le chemin avec:
la source
À l'intérieur,
<appSettings>
vous pouvez créer des clés d'application,Plus tard, vous pouvez accéder à ces valeurs en utilisant:
la source
Je vous suggère DslConfig . Avec DslConfig, vous pouvez utiliser des fichiers de configuration hiérarchiques de Global Config, Config par hôte de serveur à config par application sur chaque hôte de serveur (voir AppSpike).
Si cela est trop compliqué pour vous, vous pouvez simplement utiliser la configuration globale Variables.var
Configurez simplement dans Varibales.var
Et obtenez les valeurs de configuration avec
la source
Je ne pense pas que vous puissiez déclarer et utiliser des variables pour définir des clés appSettings dans un fichier de configuration. J'ai toujours géré les concaténations dans le code comme vous.
la source
J'ai un peu de mal avec ce que vous voulez, mais vous pouvez ajouter un fichier de remplacement aux paramètres de l'application, puis définir ce fichier de remplacement par environnement.
la source
Pour le déploiement de produits pour lesquels nous devons configurer de nombreux éléments avec des valeurs similaires, nous utilisons de petites applications console qui lisent le XML et se mettent à jour en fonction des paramètres transmis. Celles-ci sont ensuite appelées par le programme d'installation après avoir demandé à l'utilisateur le Information requise.
la source
Je recommanderais de suivre la solution de Matt Hamsmith. Si c'est un problème à implémenter, pourquoi ne pas créer une méthode d'extension qui l'implémente en arrière-plan sur la classe AppSettings?
Quelque chose comme:
Dans la méthode, vous recherchez dans DictionaryInfoConfigSection à l'aide de Linq et renvoyez la valeur avec la clé correspondante. Vous devrez cependant mettre à jour le fichier de configuration pour quelque chose du genre:
la source
J'ai trouvé cette solution:
Je ne suis pas vraiment satisfait de cette solution car je dois changer tous les attributs manuellement, si j'en ajoute un nouveau, je dois le regarder dans le app.xaml.cs.
Voici un extrait de code de App.xaml.cs:
METTRE À JOUR
Je viens de trouver une amélioration (encore une fois un extrait de code de app.xaml.cs):
Maintenant, les remplacements fonctionnent pour tous les attributs de mes paramètres qui ont Type = string et Scope = User. Je pense que j'aime ça comme ça.
MISE À JOUR2
Apparemment, la définition de Scope = Application n'est pas requise lors de l'exécution sur les propriétés.
la source
Trois solutions possibles
Pour cet exemple, j'ai utilisé le paramètre d'application suivant dans une application console:
1. Utilisez des variables d'environnement
Créez un événement pré-build qui utilisera les variables MSBuild
SETX BaseDir "$(ProjectDir)"
Réinitialiser les variables; en utilisant quelque chose comme ce qui suit:
Actualiser les variables d'environnement en cas de débordement de pile
Utilisez le paramètre de votre code:
'
'
2. Utilisez l'interpolation de chaîne:
Utilisez la fonction string.Format ()
»
»
3. En utilisant une classe statique, c'est la solution que j'utilise le plus.
La mise en oeuvre
»
»
La classe statique
»
»
Code de projet:
App.config:
Program.cs
Événement de pré-construction:
Paramètres du projet -> Événements de construction
la source