_CopyWebApplication avec des transformations web.config
Question
Je suis en train d'avoir mon application Web automatiquement Publier lorsqu'une version Release est effectuée. Je fais cela en utilisant la cible de _CopyWebApplication. J'ajouté ce qui suit à mon dossier .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 une question. La différence entre cette sortie et la sortie générée lors de l'utilisation l'élément de menu Publish dans Visual Studio, est que la transformation Web.Release.config ne soit pas appliqué au fichier Web.config pour l'utilisation de la méthode MSBuild. Au lieu de cela, Web.config, Web.Release.config et Web.Debug.config sont tous copiés.
Toutes les idées sont appréciées.
La solution
J'ai été frappé ma tête contre le mur pour cela. Après la randonnée à travers les cibles MSBuild je suis tombé sur quelque chose de très « opaque ».
Longue histoire courte: essayez le nouveau _WPPCopyWebApplication
. Il fonctionne sur ma machine. Le vieux _CopyWebApplication
ne supporte pas les transformations pour des raisons historiques. C'est 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 oeil à VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets
. Il est si mal. Trouver _CopyWebApplication
en ligne 70. Le commentaire est:
Le _CopyWebApplication d'origine est maintenant un héritage, vous pouvez toujours l'utiliser en réglant $ ( UseWPP_CopyWebApplication ) true . Par défaut, il changer maintenant d'utiliser le système de _WPPCopyWebApplication dans Microsoft.Web.Publish.targets. Il permet de tirer parti de la trsnaformation web.config. [Sic tout]
Uh oh. UseWPP_CopyWebApplication
par défaut à false (ligne 27) qui est logique si vous ne voulez pas briser la _CopyWebApplication
existante. Donc la mise à true va réellement utiliser les nouveautés WPP introduit à VS 2010. Je préfère cette plus appeler une cible « cachée ».