43 votes

_CopyWebApplication avec les transformations web.config

J'essaie de faire en sorte que mon application Web soit automatiquement publiée lorsqu'un build de version est effectué. Pour ce faire, j'utilise la cible _CopyWebApplication. J'ai ajouté les éléments suivants à mon fichier .csproj :

  <!-- Automatically Publish in Release build. -->
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
  <Target Name="AfterBuild">
    <RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" />
    <MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
  </Target>

Cela fonctionne mais avec un problème. La différence entre ce résultat et le résultat généré par l'utilisation de l'élément de menu Publish dans Visual Studio est que la transformation Web.Release.config n'est pas appliquée au fichier Web.config lors de l'utilisation de la méthode MSBuild. Au lieu de cela, Web.config, Web.Release.config et Web.Debug.config sont tous copiés.

Toute idée est la bienvenue.

74voto

Jabe Points 1158

Je me suis frappé la tête contre le mur pour cela. Après avoir parcouru les cibles MSBuild, je suis tombé sur quelque chose de très "opaque".

En bref, essayez d'utiliser la nouvelle _WPPCopyWebApplication . Il fonctionne sur ma machine. L'ancien _CopyWebApplication ne prend pas en charge les transformations pour des raisons d'héritage. Voici ce que je fais :

msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj

# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false

Longue histoire :

Jetez un coup d'œil à VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets . C'est tellement faux. Trouvez _CopyWebApplication à la ligne 70. Le commentaire est le suivant :

La _CopyWebApplication originale est maintenant un héritage, vous pouvez toujours l'utiliser en définissant $( UtiliserWPP_CopyWebApplication ) à vrai . Par défaut, il est désormais possible d'utiliser la cible _WPPCopyWebApplication dans Microsoft.Web.Publish.targets. Il permet de tirer parti de la trsnaformation web.config. [tous sic]

Uh oh. UseWPP_CopyWebApplication a pour valeur par défaut false (ligne 27), ce qui est logique si vous ne voulez pas rompre le système existant de _CopyWebApplication . Ainsi, en le mettant à true, vous utiliserez les nouvelles fonctionnalités WPP introduites dans VS 2010. Je préfère cela à l'appel d'une cible "cachée".

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