71 votes

Script de MSBuild et VS2010 publient appliquer transformation de Web.config

Donc, j'ai VS 2010 est installé et je suis en train de modifier mon script MSBuild pour notre TeamCity construire l'intégration. Tout fonctionne très bien avec une exception.

Comment puis-je savoir MSBuild que je veux appliquer le Web.conifg de transformer les fichiers que j'ai créé quand j'ai publier le construire...

J'ai le texte suivant qui produit la compilation site web mais, il génère un site Web.config, Web.Debug.config et Web.La libération.les fichiers de configuration (Tous les 3) pour la compilation répertoire de sortie. En studio lorsque j'effectue une publier de fichier système, il va faire la transformation et la seule sortie sur le Web.config avec les modifications appropriées...

<Target Name="CompileWeb">
    <MSBuild Projects="myproj.csproj" Properties="Configuration=Release;" />
</Target>

<Target Name="PublishWeb" DependsOnTargets="CompileWeb">
    <MSBuild Projects="myproj.csproj"
    Targets="ResolveReferences;_CopyWebApplication"
    Properties="WebProjectOutputDir=$(OutputFolder)$(WebOutputFolder);
                OutDir=$(TempOutputFolder)$(WebOutputFolder)\;Configuration=Release;" />
</Target>

Toute aide serait super..!

Je sais que cela peut être fait par d'autres moyens, mais je voudrais le faire à l'aide de la nouvelle VS 2010 de manière si possible

63voto

Umar Farooq Khawaja Points 2255

Je cherchais des informations similaires et n'a pas tout à fait le trouver, j'ai donc fait quelques recherches autour de dans la .objectifs les fichiers qui viennent avec Visual Studio 2010 et MSBuild 4.0. J'ai pensé que c'était le meilleur endroit pour rechercher la tâche MSBuild qui permettrait d'effectuer la transformation.

Aussi loin que j'ai pu dire, ce qui suit tâche MSBuild est utilisé:

<Project ToolsVersion="4.0"
         DefaultTargets="Deploy"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask TaskName="TransformXml"
               AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

    <PropertyGroup>
        <ProjectPath>C:\Path to Project\Here</ProjectPath>
        <DeployPath>C:\Path to Deploy\There</DeployPath>
        <TransformInputFile>$(ProjectPath)\Web.config</TransformInputFile>
        <TransformFile>$(ProjectPath)\Web.$(Configuration).config</TransformFile>
        <TransformOutputFile>$(DeployPath)\Web.config</TransformOutputFile>
        <StackTraceEnabled>False</StackTraceEnabled>
    </PropertyGroup>


    <Target Name="Transform">
        <TransformXml Source="$(TransformInputFile)"
                      Transform="$(TransformFile)"
                      Destination="$(TransformOutputFile)"
                      Condition="some condition here"
                      StackTrace="$(StackTraceEnabled)" />
    </Target>
</Project>

J'ai testé le ci-dessus et peut confirmer que cela fonctionne. Vous pourriez avoir besoin de modifier la structure un peu pour s'adapter à votre script de compilation mieux.

14voto

pattersonc Points 878

Vous devriez être en mesure d’y parvenir en utilisant la cible de paquet et en spécifiant le répertoire temp.

http://pattersonc.com/blog/index.php/2010/07/15/Visual-Studio-2010-publish-Command-from-MSBuild-Command-Line/

8voto

Brian Chavez Points 2507

Vous pouvez également vous essayer à l’aide de l' Outil de Transformation XDT:

http://CTT.codeplex.com

J’utilise ceci au lieu de jouer avec les cibles msbuild obscure. Fonctionne avec app.config pas seulement web.config.

5voto

Syam Points 1173

Cela a fonctionné pour moi avec la modification suivante

Fichier Microsoft.WebApplication.targets sous dossier MsBuild

1voto

radium Points 1393

Il s’agit d’une writeup excellent sur des transformations personnalisées :

http://www.diaryofaninja.com/blog/2011/09/14/using-Custom-webConfig-transformations-in-MSBuild

Nous avions besoin personnaliser un peu plus que la normale en raison des tonnes de ASP classique et autre méchanceté pour qu'il fallait tenir compte les déploiements de web. Cet article a sauvé heures de fouiller les cibles MS.

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