web-dev-qa-db-fra.com

Comment appeler MSBuild via l'invite de commande?

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.

21
Nasser Hadjloo

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.

21
somatic rev
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).

6
yavuz

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:

  • Choisissez This build does not copy output files to a drop folder sous l'onglet Build defaults
  • Utilisez le modèle par défaut sous l'onglet Processus
  • Choisissez AsConfigured comme valeur pour le Output location en dessous de 2. Build sous l'onglet Processus
  • Utilisez 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.

1
Anders Rosten