2009-12-31 6 views
41

J'essaie d'avoir mon application Web automatiquement Publier quand une version Release est effectuée. Je fais cela en utilisant la cible _CopyWebApplication. J'ai ajouté ce qui suit à mon fichier .csproj:_CopyWebApplication avec les transformations web.config

<!-- 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 cette sortie et la sortie générée lors de l'utilisation de l'élément de menu Publier 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.

Toutes les idées sont appréciées.

Répondre

71

Je me suis cogné la tête contre le mur pour ça. Après avoir parcouru les cibles MSBuild, je suis tombé sur quelque chose de très "opaque". Longue histoire courte: Essayez d'utiliser le nouveau _WPPCopyWebApplication. Cela fonctionne sur ma machine. L'ancien _CopyWebApplication ne prend pas en charge les transformations pour des raisons héritées. 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. C'est tellement faux. Trouver _CopyWebApplication en ligne 70. Le commentaire est:

Le _CopyWebApplication original est maintenant un héritage, vous pouvez toujours l'utiliser par le réglage $ (UseWPP_CopyWebApplication) pour vrai. Par défaut, il utilise maintenant la cible _WPPCopyWebApplication dans Microsoft.Web.Publish.targets. Cela permet de tirer parti de la trsnaformation web.config. [tous sic]

Uh oh. Par défaut, UseWPP_CopyWebApplication est faux (ligne 27), ce qui est logique si vous ne voulez pas rompre le _CopyWebApplication existant. Donc le mettre à true utilisera en fait les nouvelles fonctionnalités WPP introduites dans VS 2010. Je préfère cela à l'appel d'une cible "cachée".

+4

WTF Microsoft? Merci de partager ce Jabe ... – jjxtra

+0

Je me demande s'il y a un moyen de corriger la copie d'une bibliothèque recréée via un autre projet à inclure dans msbuild ouput dir? –

+0

J'ai essayé de le faire avec WebDeploy use/p: WebPublishMethod = FileSystem et en utilisant les fichiers pubxml. Je ne pouvais pas le faire fonctionner. Cette solution est la meilleure façon que j'ai trouvée. Un conseil: je ne pouvais pas le faire fonctionner sans l'ensemble de propriétés OutDir. Vous devrez l'inclure dans la ligne de commande même s'il est déjà défini dans les propriétés de votre projet. –

Questions connexes