webentwicklung-frage-antwort-db.com.de

Verwenden von MSBuild.exe zum "Veröffentlichen" eines ASP.NET MVC 4-Projekts mit der cmd-Zeile

Ich suche einen Befehl, um gegen den MSBuild.exe, das nur ein MVC 4-Projekt annimmt und es in einem bestimmten Verzeichnis veröffentlicht.

Beispielsweise,

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

Dies ist offensichtlich eine falsche Syntax. Ich versuche meine Frage zu vereinfachen.

Diese Frage spricht von einem Build-XML, aber ich versuche nicht, etwas mit so vielen Details zu tun.

Ich versuche einfach einen Einsatz zu machen.

Weiter unten in diese Frage spricht jemand von "MSDeploy". Ich kann das untersuchen, aber ist es die einzige Option? Ich kann Web Deploy nicht auf dem Server installieren. In diesem Fall muss ich nur "Veröffentlichen" und den Inhalt des veröffentlichten Projekts an ein bestimmtes Verzeichnis auf dem Server/Dateisystem senden.

Hat jemand einen Einzeiler, den ich benutzen kann?

Muss ich MSDeploy verwenden?

Muss für MSDeploy Web Deploy auf dem Server installiert sein?

Erfordert das Einrichten von Web Deployment auf dem Server nicht das Einrichten einiger Ports, Berechtigungen und das Installieren einiger IIS Add-Ons?

Ich würde gerne etwas Einfaches ausführen.

79
Erik5388

In VS 2012 (sowie in den Veröffentlichungsupdates, die im Azure SDK für VS 2010 verfügbar sind) wurde die Veröffentlichung über die Befehlszeile für Webprojekte vereinfacht. Wir haben dies mithilfe von Veröffentlichungsprofilen getan.

In VS für ein Webprojekt können Sie über den Veröffentlichungsdialog ein Veröffentlichungsprofil erstellen. Wenn Sie dieses Profil erstellen, wird es automatisch in Ihrem Projekt unter Properties\PublishProfiles gespeichert. Sie können das erstellte Profil verwenden, um Folgendes über die Befehlszeile mit einer Befehlszeile zu veröffentlichen.

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

Wenn Sie das Veröffentlichungsprofil (.pubxml-Datei) an einem anderen Speicherort speichern möchten, können Sie den Pfad zum Veröffentlichungsprofil übergeben.

Veröffentlichungsprofile sind MSBuild-Dateien. Wenn Sie den Veröffentlichungsprozess anpassen müssen, können Sie dies direkt in der .pubxml-Datei tun.

Wenn Ihr Endziel darin besteht, Eigenschaften über die Befehlszeile einzugeben. Ich würde folgendes empfehlen. Erstellen Sie ein Beispielveröffentlichungsprofil in VS. Untersuchen Sie dieses Veröffentlichungsprofil, um festzustellen, welche MSBuild-Eigenschaften Sie in der Befehlszeile übergeben müssen. Zu Ihrer Information, nicht alle Veröffentlichungsmethoden unterstützen das Veröffentlichen über die Befehlszeile (d. H. FTP/FPSE).

Zu Ihrer Information: Wenn Sie die .csproj/.vbproj-Datei anstelle der .sln-Datei erstellen und VS 2012 verwenden, sollten Sie auch /p:VisualStudioVersion=11.0 Übergeben. Weitere Einzelheiten zum Grund finden Sie unter http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx .

146

Erstellen Sie eine build.xml-Datei, die wie folgt aussieht

Starten Sie die Visual Studio-Eingabeaufforderung

Führen Sie msbuild build.xml aus

<?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

Der folgende Befehl funktioniert perfekt:

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

Bei Webprojekten müssen Sie wie oben beschrieben erstellen, aber dann müssen Sie auch packen/kopieren. Wir verwenden eher eine Dateikopie als das "Veröffentlichen" ...

Ebenfalls; Wir verwenden DEBUG/RELEASE, um die Website zu erstellen. aber dann tatsächliche Umgebungen, dh "QA" oder "PROD", um die web.config-Transformationen zu behandeln.

Also erstellen wir es zunächst mit RELEASE und verpacken es dann mit QA - im folgenden Beispiel.

  <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>

So;

  1. Richten Sie Ihre Eigenschaften ein
  2. Rufen Sie das BuildPackage-Ziel auf
  3. Nennen Sie das CopyOutput-Ziel Und voila!
0
James Joyce