Using MSBuild.exe to "Publish" a ASP.NET projet MVC 4 avec la ligne cmd

je suis à la recherche d'une commande pour exécuter contre le MSBuild.exe qui prend juste un projet MVC 4 et le publie dans un répertoire donné.

par exemple,

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

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

Cette question parle d'une génération XML, mais je ne suis pas en train de faire quelque chose avec autant de détail.

j'essaie simplement de faire un déploiement.

plus bas dans cette question , quelqu'un parle de"MSDeploy". Je regarde, mais est-ce la seule option? Je n'ai pas la capacité d'installer Web deploy sur le serveur. Dans ce cas, tout ce que je dois vraiment faire est "publier" et envoyer le contenu du projet publié à un répertoire donné sur le serveur/système de fichiers.

est-ce que quelqu'un a une doublure que je peux utiliser?

Dois-je utiliser MSDeploy?

est-ce que MSDeploy exige que web deploy soit installé sur le serveur?

la mise en place de Web deploy sur le serveur ne nécessite-t-elle pas la mise en place de ports, de permissions et l'installation d'add-ons IIS?

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

71
demandé sur Community 2012-12-17 22:44:15

4 réponses

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

dans VS pour un projet web, vous pouvez créer un profil de publication en utilisant la boîte de dialogue Publier. Lorsque vous créez ce profil, il est automatiquement stocké dans votre projet sous Properties\PublishProfiles. Vous pouvez utiliser le profil créé pour publier à partir du ligne de commande avec une ligne de commande suivantes.

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

si vous voulez stocker le profil publish (.pubxml file) dans un autre endroit, vous pouvez passer dans le chemin D'accès au Publiprofile.

publier des profils sont des fichiers MSBuild. Si vous avez besoin de personnaliser le processus de publication, vous pouvez le faire directement à l'intérieur de l' .fichier pubxml.

Si votre objectif final est de passer dans les propriétés de la ligne de commande. Je recommande l' suivant. Créer un exemple publier le profil dans VS. Inspectez ce profil publier pour déterminer ce que les propriétés MSBuild vous devez passer dans la ligne de commande. POUR INFORMATION, toutes les méthodes de publication ne prennent pas en charge la publication en ligne de commande (c.-à-d. FTP/FPSE).

FYI si vous construisez le .csproj/.vbproj au lieu de la .la sln et que vous utilisez VS 2012, vous devriez également passer en /p:VisualStudioVersion=11.0 . Pour plus de détails sur la raison, voir http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx .

142
répondu Sayed Ibrahim Hashimi 2012-12-19 21:45:48

créer une construction.fichier xml qui ressemble à ci-dessous

Démarrer 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
répondu nils 2014-11-04 12:06:23

avec les projets web que vous devez construire, comme indiqué ci-dessus, mais vous devez aussi empaqueter/copier. Nous utilisons une copie de fichier, plutôt que le"publier"...

aussi; nous utilisons DEBUG/RELEASE pour construire le site web; mais alors les environnements réels, c'est-à-dire" QA "ou" PROD " pour gérer le web.la configuration se transforme.

donc nous le construisons d'abord avec RELEASE, puis l'empaquetons 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>

;

  1. Installation de vos propriétés
  2. Appel de la BuildPackage cible
  3. appeler la cible CopyOutput Et le tour est joué!
0
répondu James Joyce 2016-08-21 13:39:41

la commande ci-dessous fonctionne parfaitement:

msbuild Myproject.sln  /t:Rebuild /p:outdir="c:\outproject\" /p:Configuration=Release /p:Platform="Any CPU"
0
répondu jamilir 2017-09-26 21:51:49