28 votes

MSBuild DeployOnBuild = true ne publie pas

J'ai un Visual Studio 2010 MVC2 application web que je suis en train de construire via la ligne de commande à l'aide d'Hudson. Je voudrais faire Hudson publier un site web de sortie, j'ai donc ajouté le DeployOnBuild=true et CreatePackageOnPublish=True balises à ma ligne de commande.

Ma commande est:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.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) avec succès publie une sortie web à l' \obj\Debug\Package\PackageTmp\. Mais en cours d'exécution sur le serveur Hudson (WS 2008) compile correctement, mais il ne publie pas. Même commande, même version de MSBuild, même code source.

J'ai essayé de l' /t:Publish de la cible, ce qui me donne un Ignorant ne peuvent pas être publiés Projet de réponse, comme je l'ai vu sur plusieurs autres postes.

J'ai essayé d'ajouter l' DeployOnBuild=True et CreatePackageOnPublish=True tags de mon fichier de projet en tant que bien, et pas de changement.

Toute réflexion sur pourquoi ce n'est pas l'édition? Suis-je à l'aide de ces balises de manière incorrecte? Je suis sûr qu'il y a quelque chose ici que je suis tout simplement pas voir.

22voto

Brian Hinchey Points 1112

En supposant que vous ne pas disposer de Visual Studio 2010 est installé sur votre serveur hudson, alors il se peut que vous êtes absent de l'édition des "cibles" de fichier. Après beaucoup de temps en tête-à-bureau cogner, j'ai enfin résolu ce problème.

Pendant très longtemps, j'ai su que je devais copier le répertoire

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Applications

à partir de ma machine locale avec VS2010 pour mon serveur afin de mettre le projet à construire. Mais pour que le projet soit également publier je devais également copier dans le répertoire

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

Remarque: Dans mon cas, je suis en train de commettre ces dossiers à ma source de contrôle et de modification de l' <MSBuildExtensionsPath32> de la valeur dans mon fichier csproj à point à ces vérifié les dossiers (donc il y a une étape de moins en préparant un serveur). Ce n'est pas nécessaire de le faire fonctionner, mais vous souhaitez peut-être envisager cette après vous permettre de résoudre votre problème.

Mise à JOUR: Alors après je l'ai fait ci-dessus, la construction s'est plaint qu'il ne pouvait pas trouver "Microsoft.Web.Deployment.dll". Pour résoudre cela, j'avais besoin d'installer Microsoft Web Deploy v2.0 sur le serveur , même si je ne suis que la publication 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 (Integrated)" à travers le Web IIS Plate-forme de programme d'installation va installer le nécessaire de construire des objectifs. Cela semble être un bon compromis entre ne pas avoir la totalité de l'application Visual Studio installé sur votre serveur et non pas la copie manuelle apparemment arbitraire des dossiers de votre serveur à partir de votre machine de dev.

1voto

Sergio Rykov Points 2601

Il semble que les conditions d'exécution de la cible de publication ne soient pas remplies.

1) Vous pouvez avoir différents chemins de publication

2) La condition pour exécuter la cible de publication est fausse

Pour vérifier les deux, appelez votre commande avec flag / v: diag . Recherchez par cible "Publier" et essayez de comprendre ce qui se passe réellement. Cela ressemblera à

 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)
 

1voto

bryanjonker Points 1864

Était en cours d'exécution avec VS2012 - a fini par installer des outils de développement Web sur le serveur de build et cela l'a corrigé.

0voto

Steve O Points 126

Suite à la réponse de Brian Hinchey, j'ai trouvé que j'ai également nécessaire d'ajouter mon msbuild lot d'appel avec le paramètre supplémentaire VisualStudioVersion de sorte que la version correcte et le chemin d'accès sur l'agent de build (TeamCity dans mon cas) à Microsoft.WebApplication.les objectifs devraient être appelé. Sans ce paramètre, le web, les déployer et de les publier étape n'a pas été terminée et mon lot est terminé avec succès avec un code de 0 retourné faire des analyses très difficile, même avec le /la verbosité drapeau ajouté à 'debug' la compilation. 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, j'ai eu l'Visual Studio compatibilité activé sur mon projet web MVC pour que je puisse ouvrir le projet dans VS2010 ou 2012 (comme Sayed notes dans le lien ci-dessus) - donc, je suis dev communique localement dans VS2012 alors que la TeamCity agent de build a le VS 2010 web de créer et de déployer des cibles.

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