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:
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?
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:
website.publishproj
à la racine du siteLe 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.
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.