web-dev-qa-db-ja.com

MSBuild.exeを使用して、cmd行でASP.NET MVC 4プロジェクトを「公開」する

MVC 4プロジェクトを取得して、指定されたディレクトリに発行するMSBuild.exeに対して実行するコマンドを探しています。

例えば、

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

これは明らかに間違った構文です。私は質問を簡素化しようとしています。

この質問 XMLの構築について話しますが、私はそれほど詳細なことをしようとはしていません。

私は単にデプロイしようとしています。

さらに下の その質問 で、誰かが「MSDeploy」について語っています。私はそれを調べることができますが、それは唯一のオプションですか?サーバーにWebデプロイをインストールする機能がありません。その場合、私が本当にする必要があるのは「公開」し、公開されたプロジェクトの内容をサーバー/ファイルシステム上の指定されたディレクトリに送信することだけです。

誰でも使用できるライナーを持っていますか?

MSDeployを使用する必要がありますか?

MSDeployでは、サーバーにWebデプロイをインストールする必要がありますか?

サーバー上でWebデプロイを設定するには、いくつかのポート、権限を設定し、いくつかのIISアドオンをインストールする必要はありませんか?

単純なものを実行したいだけです。

79
Erik5388

VS 2012(およびVS 2010の Azure SDK で利用可能な更新の公開)では、Webプロジェクトのコマンドライン公開を簡素化しました。これは、プロファイルの公開を使用して行いました。

VS for Webプロジェクトでは、公開ダイアログを使用して公開プロファイルを作成できます。そのプロファイルを作成すると、プロジェクトのProperties\PublishProfilesの下に自動的に保存されます。作成したプロファイルを使用して、次のコマンドラインを使用してコマンドラインから公開できます。

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

パブリッシュプロファイル(.pubxmlファイル)を他の場所に保存する場合は、PublishProfileへのパスを渡すことができます。

公開プロファイルはMSBuildファイルです。公開プロセスをカスタマイズする必要がある場合は、.pubxmlファイル内で直接カスタマイズできます。

最終目標がコマンドラインからプロパティを渡すことである場合。以下をお勧めします。 VSでサンプル公開プロファイルを作成します。その公開プロファイルを調べて、コマンドラインで渡す必要があるMSBuildプロパティを決定します。参考までに、すべての公開方法がコマンドライン公開(つまりFTP/FPSE)をサポートしているわけではありません。

参考までに、.slnの代わりに.csproj/.vbprojをビルドし、VS 2012を使用している場合は、/p:VisualStudioVersion=11.0も渡す必要があります。理由の詳細については、 http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx を参照してください。

146

以下のようなbuild.xmlファイルを作成します

Visual Studioコマンドプロンプトの開始

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

以下のコマンドは完璧に動作します:

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

Webプロジェクトでは、上記のようにビルドする必要がありますが、パッケージ化/コピーする必要もあります。 「公開」ではなく、ファイルのコピーを使用します...

また; DEBUG/RELEASEを使用してWebサイトを構築します。しかし、実際の環境、つまりweb.config変換を処理する「QA」または「PROD」。

以下の例では、最初にRELEASEでビルドし、次にQAでパッケージ化します。

  <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. プロパティを設定する
  2. BuildPackageターゲットを呼び出す
  3. CopyOutputターゲットを呼び出してください。
0
James Joyce