MSBuild DeployOnBuild=true ne pas publier

J'ai une application Web Visual Studio 2010 MVC2 que je construis via la ligne de commande en utilisant Hudson. Je voudrais faire en sorte que Hudson publie une sortie web, j'ai donc ajouté les balises DeployOnBuild=true et CreatePackageOnPublish=True à ma ligne de commande.

Ma commande est:

C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe 
   /target:Clean,Build 
   /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
   [my project name.csproj]

L'exécution de cette commande sur ma machine de développement (Windows 7) publie avec succès une sortie web dans objDebugPackagePackageTmp. Mais l'exécuter sur le serveur Hudson (WS 2008) compile avec succès, mais il ne publie pas. Même commande, même version de MSBuild, même code source.

J'ai essayé la cible /t:Publish, ce qui me donne une réponse de projet non publiable, comme je l'ai vu sur les messages de plusieurs autres personnes.

J'ai essayé d'ajouter les balises DeployOnBuild=True et CreatePackageOnPublish=True à mon fichier de projet, et aucun changement.

Des réflexions sur pourquoi ce n'est pas la publication? Est-ce que j'utilise ces balises de manière incorrecte? Je suis sûr qu'il y a quelque chose ici que je ne vois pas.

38
demandé sur SteveC 2011-02-11 00:08:05

4 réponses

En supposant que n'ait pas Visual Studio 2010 installé sur votre serveur hudson, il se peut que le fichier "cibles" de publication vous manque. Après beaucoup de claquement de la tête au bureau, j'ai finalement résolu cela.

Pendant un certain temps, je savais que j'avais besoin de copier le répertoire

C:\Program fichiers (x86) \ MSBuild \ Microsoft\VisualStudio\v10. 0 \ WebApplications

De ma machine locale avec VS2010 à mon serveur afin d'obtenir le projet à construire. Mais pour que le projet publie également , j'avais également besoin de copier sur le répertoire

C:\Program fichiers (x86) \ MSBuild \ Microsoft\VisualStudio\v10. 0 \ Web

Note: dans mon cas, je suis en train de valider ces dossiers dans mon contrôle de source et de changer la valeur <MSBuildExtensionsPath32> dans mon fichier csproj pour pointer vers ces dossiers extraits (il y a donc une étape de moins lors de la préparation d'un serveur). Ce n'est pas nécessaire pour le faire fonctionner, mais vous voudrez peut-être considérer cela après avoir résolu votre problème.

Mise à jour: donc, après avoir fait ce qui précède, la construction s'est plainte qu'elle ne pouvait pas trouver "Microsoft.Web.Déploiement.DLL". Pour résoudre ce problème, j'ai dû installer Microsoft Web Deploy v2.0 sur le serveur même si Je ne publie que sur le système de fichiers. Je suppose que je peux voir la logique dans ce.

Mise à jour: j'ai découvert que l'installation de " Visual Studio 2010 Shell (intégré)" via le programme D'installation de la plate-forme Web IIS installera la version requise cible. Cela semble être un bon compromis entre Ne pas avoir toute L'application Visual Studio installée sur votre serveur et ne pas copier manuellement des dossiers apparemment arbitraires sur votre serveur à partir de votre machine de développement.

40
répondu Brian Hinchey 2012-07-16 06:00:46

Il semble que les conditions d'exécution de publish target ne soient pas remplies.

1) vous pouvez avoir différents chemins de publication

2) la Condition pour exécuter publier cible est faux

Pour vérifier les deux, appelez votre commande avec flag / v:diag . Recherche par Cible "Publier" et essayer de comprendre ce qui se passe vraiment. Il va ressembler à

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj":
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files.
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild
Output files: D:\App\App.exe\\App.config
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144)
3
répondu Sergio Rykov 2011-02-11 12:14:12

Fonctionnait avec VS2012 - a fini par installer des outils de développement web sur le serveur de construction et cela l'a corrigé.

1
répondu bryanjonker 2012-08-23 14:09:21

Suite à la réponse de Brian Hinchey, j'ai trouvé que j'avais également besoin d'ajouter mon appel batch msbuild avec le paramètre supplémentaire VisualStudioVersion afin que la version et le chemin corrects sur l'agent de construction (TeamCity dans mon cas) à Microsoft.WebApplication.les cibles seraient appelées. Sans ce paramètre, l'étape de déploiement et de publication web n'a pas été terminée et mon lot s'est terminé avec succès avec un code 0 renvoyé rendant l'analyse très difficile-même avec l'indicateur / verbosity ajouté à "déboguer" la construction. Ce point est fait par SAYED IBRAHIM HASHIMI sur son site: http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

Le scénario pour mon cas était que J'avais la compatibilité Visual Studio activée sur mon projet web MVC afin que je puisse ouvrir le projet dans VS2010 ou 2012 (comme le note Sayed dans le lien ci - dessus) - donc je dev'ing localement dans VS2012 alors que L'agent de construction TeamCity A LE VS 2010 Web build et cible.

1
répondu Steve O 2013-02-20 14:28:54