88

MSBuild.exeMVC 4 プロジェクトを取得して特定のディレクトリに発行するだけのコマンドを探しています。

例えば、

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

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

This questionはビルドXMLについて語っていますが、私はそれほど詳細なことをしようとはしていません。

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

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

誰かが私が使用できるワンライナーを持っていますか?

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

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

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

簡単なことを実行したいだけです。

4

5 に答える 5

162

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

Web プロジェクトの VS では、発行ダイアログを使用して発行プロファイルを作成できます。そのプロファイルを作成すると、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を参照してください。

于 2012-12-19T07:44:03.273 に答える
12

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

VisualStudioコマンドプロンプトを起動します

msbuildbuild.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>
于 2012-12-18T14:00:07.993 に答える
8

以下のコマンドは完璧に機能します:

msbuild Myproject.sln  /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"
于 2015-05-25T17:51:01.400 に答える
2

I found Sayed's answer was deploying the default configuration i.e. Debug. The configuration selected in the Publishing Profile seems to get ignored by MSBuild. Accordingly I changed the command to specify the correct configuration for the deployment...

msbuild mysln.sln /p:Configuration=[config-name] /p:DeployOnBuild=true /p:PublishProfile=[profile-name]

where config-name = Release or some other build configuration you've created

于 2020-05-21T03:55:36.387 に答える
1

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

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

したがって、最初に 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 ターゲットを呼び出す
于 2016-08-21T13:39:41.817 に答える