Pour l'application Web Visual Studio 2010, nous avons des fonctionnalités de transformation de configuration qui nous permettent de gérer plusieurs fichiers de configuration pour différents environnements. Mais la même fonctionnalité n'est pas disponible pour les fichiers App.Config pour les services Windows / WinForms ou l'application console.
Il existe une solution de contournement comme suggéré ici: Application de la magie XDT à App.Config .
Cependant, ce n'est pas simple et nécessite un certain nombre d'étapes. Existe-t-il un moyen plus simple d'obtenir la même chose pour les fichiers app.config?
Réponses:
Cela fonctionne maintenant avec le complément Visual Studio traité dans cet article: SlowCheetah - Syntaxe de transformation Web.config désormais généralisée pour tout fichier de configuration XML .
la source
J'ai essayé plusieurs solutions et voici la plus simple que j'ai trouvée personnellement.
Dan a souligné dans les commentaires que le message d'origine appartient à Oleg Sych - merci, Oleg!
Voici les instructions:
1. Ajoutez un fichier XML pour chaque configuration au projet.
En général , vous aurez
Debug
etRelease
configurations nom pour vos fichiersApp.Debug.config
etApp.Release.config
. Dans mon projet, j'ai créé une configuration pour chaque type d'environnement, donc vous voudrez peut-être l'expérimenter.2. Déchargez le projet et ouvrez le fichier .csproj pour le modifier
Visual Studio vous permet de modifier des fichiers .csproj directement dans l'éditeur - il vous suffit de décharger le projet en premier. Cliquez ensuite dessus avec le bouton droit de la souris et sélectionnez Modifier <ProjectName> .csproj .
3. Liez les fichiers App. *. Config au fichier principal App.config
Recherchez la section du fichier de projet qui contient tout
App.config
et lesApp.*.config
références. Vous remarquerez que leurs actions de génération sont définies surNone
:Tout d'abord, définissez l'action de construction pour chacun d'eux
Content
.Ensuite, rendez tous les fichiers spécifiques à la configuration dépendants du principal
App.config
afin que Visual Studio les regroupe comme il le fait pour les fichiers de concepteur et de code.Remplacez XML ci-dessus par celui ci-dessous:
4. Activez la magie des transformations (uniquement nécessaire pour les versions de Visual Studio antérieures à VS2017 )
En fin de dossier après
et avant la finale
insérez le XML suivant:
Vous pouvez maintenant recharger le projet, le construire et profiter des
App.config
transformations!FYI
Assurez-vous que vos
App.*.config
fichiers ont la bonne configuration comme celle-ci:la source
v10.0
parv$(VisualStudioVersion)
pour vous assurer que votre projet fonctionne avec toutes les versions ultérieures de VS.Une autre solution que j'ai trouvée est de NE PAS utiliser les transformations mais d'avoir juste un fichier de configuration séparé, par exemple app.Release.config. Ajoutez ensuite cette ligne à votre fichier csproj.
Cela générera non seulement le bon fichier myprogram.exe.config, mais si vous utilisez le projet d'installation et de déploiement dans Visual Studio pour générer MSI, il forcera le projet de déploiement à utiliser le fichier de configuration correct lors de l'empaquetage.
la source
<AppConfig>App.Release.config</AppConfig>
ligne à l'intérieur de la<PropertyGroup
condition existante pour laRelease
configuration et l'EDI a montré une ligne ondulée en dessous de la<AppConfig>
ligne ... disant qu'il n'était pas dans le schéma ou quelque chose, mais j'ai quand même enregistré le fichier et rechargé le fichier de projet et fait une construction enRelease
config et ça a marché!D'après mon expérience, les choses dont j'ai besoin pour rendre l'environnement spécifique sont des choses comme les chaînes de connexion, les paramètres des applications et souvent les paramètres smpt. Le système de configuration permet de spécifier ces choses dans des fichiers séparés. Vous pouvez donc l'utiliser dans votre app.config / web.config:
Ce que je fais généralement, c'est de mettre ces sections spécifiques à la configuration dans des fichiers séparés, dans un sous-dossier appelé ConfigFiles (que ce soit à la racine de la solution ou au niveau du projet, cela dépend). Je définis un fichier par configuration, par exemple smtp.config.Debug et smtp.config.Release.
Ensuite, vous pouvez définir un événement de pré-génération comme suit:
Dans le développement d'équipe, vous pouvez affiner cela en incluant le% COMPUTERNAME% et / ou% USERNAME% dans la convention.
Bien sûr, cela implique que les fichiers cibles (x.config) ne doivent PAS être placés dans le contrôle de code source (car ils sont générés). Vous devez toujours les ajouter au fichier de projet et définir leur propriété de type de sortie sur "copier toujours" ou "copier si plus récent".
Simple, extensible et fonctionne pour tous les types de projets Visual Studio (console, winforms, wpf, web).
la source
<?xml version="1.0"?> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="C:\mail"/> <network host="localhost"/> </smtp>
La transformation:<?xml version="1.0"?> <smtp xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace" from="[email protected]" deliveryMethod="Network"> <network .../> </smtp>
Inspiré par Oleg et d'autres dans cette question, j'ai pris la solution https://stackoverflow.com/a/5109530/2286801 un peu plus loin pour activer ce qui suit.
Cette solution fonctionne en effectuant la transformation app.config avant que le fichier app.config soit référencé pour la première fois dans le processus MSBuild. Il utilise un fichier de cibles externes pour une gestion plus facile sur plusieurs projets.
Instructions:
Étapes similaires à l'autre solution. J'ai cité ce qui reste le même et je l'ai inclus pour être complet et faciliter la comparaison.
0. Ajoutez un nouveau fichier à votre projet appelé AppConfigTransformation.targets
3. Liez les fichiers App. *. Config au fichier principal App.config
Recherchez la section du fichier de projet qui contient toutes les références App.config et App. *. Config et remplacez comme suit. Vous remarquerez que nous utilisons None au lieu de Content.
insérez le XML suivant:
Terminé!
la source
Vous pouvez utiliser un fichier de configuration distinct par configuration, par exemple app.Debug.config, app.Release.config, puis utiliser la variable de configuration dans votre fichier de projet:
Cela créera ensuite le fichier ProjectName.exe.config correct selon la configuration dans laquelle vous construisez.
la source
J'ai écrit une belle extension pour automatiser la transformation app.config comme celle intégrée dans la transformation de configuration de projet d'application Web
Le plus grand avantage de cette extension est que vous n'avez pas besoin de l'installer sur toutes les machines de build
la source
Installez «Configuration Transform Tool» dans Visual Studio à partir de Marketplace et redémarrez VS. Vous pourrez également voir la transformation de l'aperçu du menu pour app.config.
https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform
la source
J'ai donc fini par adopter une approche légèrement différente. J'ai suivi les étapes de Dan jusqu'à l'étape 3, mais j'ai ajouté un autre fichier: App.Base.Config. Ce fichier contient les paramètres de configuration que vous souhaitez dans chaque App.Config généré. Ensuite, j'utilise BeforeBuild (avec l'ajout de Yuri à TransformXml) pour transformer la configuration actuelle avec la configuration de base en App.config. Le processus de génération utilise ensuite normalement App.config transformé. Cependant, une gêne est que vous souhaitez exclure l'App.config en constante évolution du contrôle de code source par la suite, mais les autres fichiers de configuration en dépendent désormais.
la source
Juste une petite amélioration de la solution qui semble être affichée partout maintenant:
la source
$(VisualStudioVersion)
défini lors de l'utilisation directe de MSBuild.J'ai créé une autre alternative à celle publiée par Vishal Joshi où l'exigence de changer l'action de génération en Contenu est supprimée et également implémenté la prise en charge de base du déploiement ClickOnce. Je dis de base, car je ne l'ai pas testé à fond, mais cela devrait fonctionner dans le scénario de déploiement ClickOnce typique.
La solution consiste en un seul projet MSBuild qui, une fois importé dans un projet d'application Windows existant (* .csproj), étend le processus de génération pour envisager la transformation app.config.
Vous pouvez lire une explication plus détaillée sur Visual Studio App.config XML Transformation et le fichier de projet MSBuild peut être téléchargé à partir de GitHub .
la source
Si vous utilisez un TFS en ligne (version Cloud) et que vous souhaitez transformer App.Config en projet, vous pouvez effectuer les opérations suivantes sans installer d'outils supplémentaires. Depuis VS => Déchargez le projet => Modifier le fichier de projet => Allez en bas du fichier et ajoutez ce qui suit:
AssemblyFile et Destination fonctionnent pour une utilisation locale et un serveur TFS en ligne (Cloud).
la source
la solution proposée ne fonctionnera pas lorsqu'une bibliothèque de classes avec un fichier de configuration est référencée à partir d'un autre projet (dans mon cas, c'était la bibliothèque de projet Azure Worker). Il ne copiera pas le fichier transformé correct du
obj
dossier dans lebin\##configuration-name##
dossier. Pour le faire fonctionner avec des changements minimes, vous devez changer laAfterCompile
cible pourBeforeCompile
:la source