J'ai un site Web (pas une application Web) et je veux le publier tous les soirs à partir de l'invite de commandes dans le même répertoire.
Je ne veux pas utiliser d'outils d'automatisation de construction comme TeamCity, TFS ou des outils tiers comme Nant - cela devrait être fait avec MSBuild
. Comment puis-je faire ceci?
pdate: dans la fenêtre Publier, la seule option à vérifier est Use Fixed naming and single page assemblies
.
D'après votre commentaire, votre projet Web est un projet de site Web et non un projet d'application Web.
Dans ce cas, la cible "Publier" ne peut pas être l'option mais "AspNetCompiler" est la solution.
Créez un fichier xml avec le contenu ci-dessous et appelez-le à partir de MSBuild.
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<Target Name="PrecompileWeb">
<AspNetCompiler
VirtualPath="/MyWebSite"
PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
TargetPath="c:\precompiledweb\MyWebSite\"
Force="true"
Debug="true"
FixedNames="True"
/>
</Target>
</Project>
La référence à cette tâche est ici et vous pouvez configurer toutes vos options d'annulation/vérification.
FixedName = "True" équivaut à la vérification de l'option "Utiliser un nom fixe et une seule page ...".
Ensuite, vous appelez ce fichier à partir de MSBuild au lieu du fichier de solution.
MSBuild your.xml /p:Configuration=<Debug/Release>
Tant que vos bibliothèques de classes sont référencées par votre projet de site Web, elles seront construites ensemble.
MSBuild.exe **MYPROJ**.sln
/p:outdir="Z:\output\\",OutputPath="Z:\output\\",webprojectoutputdir="Z:\output\\",configuration=RELEASE
/t:Clean;Build
/flp1:logfile=Z:\output\\\Log_msbuild.log;verbosity=detailed
/flp2:logfile=Z:\output\\\Log_warnings.log;warningsonly;verbosity=detailed
/flp3:logfile=Z:\output\\\Log_errors.log;errorsonly;verbosity=detailed
/nologo
/noconlog
Il peut compiler tous les types de projets (Web, Webservice, bureau, ..) et il peut créer des fichiers journaux comme (buildlog, erreur et avertissements).
Désolé pour la réponse tardive, et merci pour l'entrée alan. Malheureusement, votre suggestion n'a pas fonctionné, j'ai donc fini par faire ce qui suit:
This build does not copy output files to a drop folder
sous l'onglet Build defaultsAsConfigured
comme valeur pour le Output location
en dessous de 2. Build
sous l'onglet ProcessusUtilisez cette chaîne d'argument MSBuild:
/p:DeployOnBuild=True;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\\192.168.x.x\Nightly\MainBranch";AutoParameterizationWebConfigConnectionStrings=false
Ce résultat est le dossier suivant que j'utilise comme racine Web pour le site de test: \\192.168.x.x\Nightly\MainBranch\PackageTmp
. Ce n'est évidemment pas optimal car je préférerais ne pas avoir le dossier PackageTmp
et je n'ai pas non plus testé ce qui se passe quand il y a plusieurs applications web dans la même solution, mais je ne peux pas utiliser plus de temps sur ce problème.
Je ne comprends vraiment pas pourquoi Microsoft a rendu une tâche aussi simple si compliquée.