web-dev-qa-db-fra.com

Utilisation de MSBuild.exe pour "publier" un projet ASP.NET MVC 4 avec la ligne de commande

Je cherche une commande pour courir contre le MSBuild.exe qui prend simplement un projet MVC 4 et le publie dans un répertoire donné.

Par exemple,

MSBuild <solution>/<project>.csproj -publish -output=c:/folder

Ceci est évidemment une syntaxe incorrecte. J'essaie de simplifier ma question.

Cette question parle d'un build XML, mais je n'essaie pas de faire quoi que ce soit avec autant de détails.

J'essaye simplement de faire un déploiement.

Plus bas dans cette question , quelqu'un parle de "MSDeploy". Je peux examiner cela, mais est-ce la seule option? Je n'ai pas la possibilité d'installer Web deploy sur le serveur. Dans ce cas, tout ce que j'ai vraiment besoin de faire est "Publier" et envoyer le contenu du projet publié dans un répertoire donné du serveur/système de fichiers.

Quelqu'un a-t-il une seule doublure que je peux utiliser?

Dois-je utiliser MSDeploy?

MSDeploy requiert-il le déploiement Web pour être installé sur le serveur?

La configuration du déploiement Web sur le serveur ne nécessite-t-elle pas la configuration de certains ports, autorisations et installation de certains additifs IIS?)?

J'aimerais juste exécuter quelque chose de simple.

79
Erik5388

Dans VS 2012 (ainsi que dans les mises à jour de publication disponibles dans Azure SDK pour VS 2010), nous avons simplifié la publication en ligne de commande pour les projets Web. Nous l'avons fait en utilisant des profils de publication.

Dans VS pour un projet Web, vous pouvez créer un profil de publication à l'aide de la boîte de dialogue Publier. Lorsque vous créez ce profil, il est automatiquement stocké dans votre projet sous Propriétés\PublishProfiles. Vous pouvez utiliser le profil créé pour publier à partir de la ligne de commande avec une ligne de commande comme suit.

msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name>

Si vous souhaitez stocker le profil de publication (fichier .pubxml) à un autre emplacement, vous pouvez indiquer le chemin d'accès au fichier PublishProfile.

Les profils de publication sont des fichiers MSBuild. Si vous devez personnaliser le processus de publication, vous pouvez le faire directement dans le fichier .pubxml.

Si votre objectif final est de transmettre des propriétés à partir de la ligne de commande. Je recommanderais le suivant. Créez un exemple de profil de publication dans VS. Examinez ce profil de publication pour déterminer les propriétés MSBuild à transmettre sur la ligne de commande. Pour votre information, toutes les méthodes de publication ne prennent pas en charge la publication en ligne de commande (FTP/FPSE).

Pour votre information, si vous construisez le fichier .csproj/.vbproj au lieu du fichier .sln et que vous utilisez VS 2012, vous devez également passer /p:VisualStudioVersion=11.0. Pour plus de détails sur les raisons, consultez http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx .

146

Créez un fichier build.xml qui ressemble à celui ci-dessous

Lancer l'invite de commande Visual Studio

Exécutez msbuild build.xml

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">

  <PropertyGroup>
    <Build>$(MSBuildProjectDirectory)\Build</Build>
    <ProjectFile>MyProject.csproj</ProjectFile> 
    <ProjectName>MyProjectNameInVisualStudio</ProjectName>
    <CopyTo>$(MSBuildProjectDirectory)\CopyTo</CopyTo>
  </PropertyGroup> 

  <Target Name="Build"> 
    <RemoveDir Directories="$(Build)"/>  
    <MSBuild Projects="$(ProjectFile)" Properties="Configuration=Release;OutputPath=$(Build);OutDir=$(Build)/"></MSBuild>  
    <Exec Command="robocopy.exe  $(Build)\_PublishedWebsites\$(ProjectName) $(CopyTo) /e /is
      if %errorlevel% leq 4 exit 0 else exit %errorlevel%"/>    
  </Target>

</Project>
10
nils

La commande ci-dessous fonctionne parfaitement:

msbuild Myproject.sln  /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"
1
jamilir

Avec les projets Web, vous devez créer, comme indiqué ci-dessus, mais vous devez également empaqueter/copier. Nous utilisons une copie de fichier, plutôt que le "publier" ...

Aussi; nous utilisons DEBUG/RELEASE pour construire le site Web; mais ensuite les environnements réels, c’est-à-dire "QA" ou "PROD" pour gérer les transformations web.config.

Nous le construisons donc initialement avec RELEASE, puis le conditionnons avec QA - dans l'exemple ci-dessous.

  <PropertyGroup>   
    <SolutionName>XXX.Website</SolutionName>
    <ProjectName>XXX.Website</ProjectName>
    <IisFolderName>XXX</IisFolderName>

    <SolutionConfiguration>QA</SolutionConfiguration> <!--Configuration will be set based on user selection-->   

    <SolutionDir>$(MSBuildThisFileDirectory)..</SolutionDir>
    <OutputLocation>$(SolutionDir)\bin\</OutputLocation>
     <WebServer>mywebserver.com</WebServer>
  </PropertyGroup>

  <Target Name="BuildPackage">
    <MSBuild Projects="$(SolutionDir)\$(SolutionName).sln" ContinueOnError="false" Targets="Clean;Rebuild" Properties="Configuration=Release" />
    <MSBuild Projects="$(SolutionDir)\$(ProjectName)\$(ProjectName).csproj" ContinueOnError="false" Targets="Package" Properties="Configuration=$(SolutionConfiguration);AutoParameterizationWebConfigConnectionStrings=False" />
  </Target>

  <Target Name="CopyOutput">
    <ItemGroup>
      <PackagedFiles Include="$(SolutionDir)\$(ProjectName)\obj\$(SolutionConfiguration)\Package\PackageTmp\**\*.*"/>
    </ItemGroup>
    <Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\$(WebServer)\$(IisFolderName)\$(SolutionConfiguration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
  </Target>

Alors;

  1. Configurez vos propriétés
  2. Appelez la cible BuildPackage
  3. Appelez la cible CopyOutput Et le tour est joué!
0
James Joyce