Faire fonctionner les transformations Web.config localement
-
26-09-2019 - |
Question
Je souhaite que les transformations web.config fonctionnent localement, mais apparemment, les transformations ne se produisent que lors des déploiements.
Est-ce que quelqu'un connaît un moyen d'exécuter la cible msbuild "TransformWebConfig" sans qu'elle passe par le processus de "reconstruction" et également de spécifier et de sortir le répertoire où cracher le web.config transformé ?
MODIFIER:En utilisant la réponse de Sayed, j'ai créé un .bat
fichier pour exécuter la tâche pour moi :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig
copy /Y "D:\Demo\Web.config" "D:\MyProject\Web.config"
del ""D:\Demo\Web.config"
le "Transformation.proj" est une copie de l'extrait de code de Sayed dans la réponse ci-dessous.Spécifiez simplement la source, la cible et la destination de la transformation.Le nouveau fichier, dans ce cas, le "web.config" transformé sera dans le répertoire "D:\Demo".Je le copie simplement pour écraser le web.config de mon projet et, enfin, je supprime le fichier généré dans le dossier "demo".
De plus, j'ai créé une macro pour exécuter ce fichier batch et effectuer la transformation pour moi :
Public Module DoTransform
Sub RunTransformBatchFile()
Try
Process.Start("D:\Demo\RunTransform.bat")
Catch ex As System.Exception
MsgBox(ex.Message)
End Try
End Sub
End Module
Vous pouvez également ajouter un bouton sur votre barre d'outils pour exécuter ce lot et/ou attribuer une touche de raccourci à exécuter.
La solution
si vous voulez transformer un fichier de configuration sans utiliser la publication Web Pipeline vous suffit d'utiliser la tâche TransformXML manuellement. J'ai écrit un billet de blog détaillé sur ce sujet à http://sedodream.com/2010/ 04/26 / ConfigTransformationsOutsideOfWebAppBuilds.aspx , mais voici les hautes lumières:
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Target Name="Demo">
<TransformXml Source="app.config"
Transform="Transform.xml"
Destination="app.prod.config"/>
</Target>
</Project>
Ici, je transformerai manuellement le fichier app.config en utilisant le fichier de transform.xml et le fichier de destination est app.prod.config.
Une chose que vous avez mentionné était capable de faire la transformation sur place lors de l'exécution de l'application. La raison pour laquelle nous ne réalisons la transformation sur l'emballage / Publish est parce que si nous transformons web.config alors lui-même la prochaine fois que vous déboguer votre application web.config se transforme à nouveau. Ainsi, par exemple, si dans votre web.debug.config vous avez la transformation d'ajouter une valeur à config, tout est OK la première fois que vous ajoutez cela, mais la prochaine fois que votre course / debug votre application, il vous ajoute à nouveau. Il est donc préférable d'éviter cela.
Autres conseils
Si vous utilisez Visual Studio 2015, vous pouvez simplement faire un clic droit sur la transformation de l'environnement souhaité, et cliquer sur "Afficher l'aperçu"...Il générera ensuite la transformation, et vous pourrez la copier et la coller dans le fichier Web.config normal à des fins de débogage.Ne le commettez pas !
Si vous utilisez Visual Studio 2013, vous pouvez installer l'extension SlowCheetah - XML Transforms