web-dev-qa-db-fra.com

Comment utiliser la ligne de commande msbuild pour déployer le projet de site Web VS2012 sans le précompiler?

J'ai hérité d'un très gros projet de site Web VS2012 (pas d'application Web) et j'essaie d'automatiser son déploiement. Il y a des tonnes de références circulaires dans le projet, donc pour le faire précompiler en utilisant aspnet_compiler.exe, je dois activer les noms fixes. Le problème est que la construction prend environ 20 minutes sur mon quad core, 16 Go de RAM, machine de développement SSD. Le développeur précédent n'avait pas à gérer cela car il copiait simplement la source entière sur le serveur Web de production.

Donc, avant d'aborder le problème des références circulaires, je souhaite au moins déployer automatiquement le projet à l'aide de msdeploy. Je peux utiliser les profils de publication dans Visual Studio et il fait exactement ce que je veux:

  1. Génère les DLL référencées et les ajoute au projet.
  2. Le web.config se transforme-t-il?.
  3. N'essaie même pas de créer le site Web, mais simplement de créer des packages dans un fichier Zip pour moi.

Ce que je ne peux pas comprendre pour la vie de moi, c'est comment obtenir MSBuild.exe pour faire exactement la même chose!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy

La commande ci-dessus essaie toujours d'exécuter aspnet_compiler qui n'est pas ce que je veux. Le profil de publication dit qu'il ne devrait pas être précompilé ... mais dans les journaux je le vois l'exécuter.

Donc: Comment utiliser msbuild pour déployer un projet de site Web sans le précompiler?

35
Paul Lemke

Pour le projet de site Web, le processus de publication n'est pas intégré au processus de génération. Pour le projet de site Web, car il n'y a pas de processus de construction formel, nous n'avons vraiment rien à étendre.

Remarque: le contenu ci-dessous nécessite d'avoir VS 2012 (ou VS2010 d'ailleurs) et Azure SDK en plus de cela. Les fonctionnalités n'étaient pas incluses dans la goutte RTM de VS2012.

Après avoir créé un profil de publication dans VS, les éléments suivants sont créés:

  1. Un profil de publication (fichier .pubxml) sous App_Data/PublishProfiles
  2. UNE website.publishproj à la racine du site

Le but du website.publishproj vise à faciliter la publication en ligne de commande. C'est un complément pour le .csproj/.vbproj que vous obtiendriez normalement lors de l'utilisation d'un projet d'application Web.

Si vous souhaitez automatiser la publication, vous pouvez utiliser une commande comme celle-ci.

msbuild.exe website.publishproj /p:DeployOnBuild=true 
   /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0

Vous ne devriez pas avoir à spécifier les cibles invoquées.

Concernant le message dans VS que le site est en cours de pré-compilation, c'est un bug. Il passe par une pré-compilation, mais la publication utilise le paramètre du profil. Ce bogue aurait dû être corrigé dans Visual Studio Update 1 . Après l'installation, vous ne devriez pas voir l'étape de pré-compilation inutile. Veuillez me faire savoir si vous voyez toujours cela.

54
Sayed Ibrahim Hashimi

Alors que la réponse de Sayed Ibrahim Hashimi m'a un peu aidé, voici ce que j'ai trouvé nécessaire pour VS2012:

Après avoir installé le SDK Azure, j'ai créé un profil de publication de fichier, qui a créé un dossier PublishProfiles dans le dossier Properties de mon projet. Dans ce nouveau dossier, deux fichiers xml nommés my_sample_PublishProfile_Foo.pubxml et my_sample_PublishProfile_Foo.pubxml.user où créé.

En utilisant le .pubxml, je peux publier avec msbuild comme ceci:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "C:\...\UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:\...\PublishProfiles\my_sample_PublishProfile_Foo.pubxml"  /p:VisualStudioVersion=11.0

N'oubliez pas d'exécuter le fichier batch qui contient ce script avec des privilèges d'administrateur.

1
callisto