web-dev-qa-db-ja.com

コマンドプロンプトからMSBuildを呼び出す方法は?

Webサイト(Webアプリケーションではない)があり、毎晩同じディレクトリにあるコマンドプロンプトから公開したい。

TeamCity、TFS、またはNantなどのサードパーティツールのようなビルド自動化ツールを使用したくない-MSBuildを使用して実行する必要があります。これどうやってするの?

更新: [公開]ウィンドウでチェックする必要があるオプションはUse Fixed naming and single page assemblies

21
Nasser Hadjloo

コメントから、WebプロジェクトはWebアプリケーションプロジェクトではなくWebサイトプロジェクトです。

この場合、「公開」ターゲットをオプションにすることはできませんが、「AspNetCompiler」がソリューションです。

以下のコンテンツでxmlファイルを作成し、MSBuildから呼び出します。

<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
            FixedNames="True"
        />
    </Target>
</Project>

このタスクへの参照は here であり、すべてのun/checkオプションを構成できます。

FixedName = "True"は、「固定命名と単一ページを使用...」オプションのチェックに相当します。

次に、ソリューションファイルではなく、MSBuildからこのファイルを呼び出します。

MSBuild your.xml /p:Configuration=<Debug/Release>

クラスライブラリがWebサイトプロジェクトによって参照されている限り、それらは一緒にビルドされます。

21
somatic rev
MSBuild.exe **MYPROJ**.sln 
/p:outdir="Z:\output\\",OutputPath="Z:\output\\",webprojectoutputdir="Z:\output\\",configuration=RELEASE 
/t:Clean;Build 

/flp1:logfile=Z:\output\\\Log_msbuild.log;verbosity=detailed 
/flp2:logfile=Z:\output\\\Log_warnings.log;warningsonly;verbosity=detailed 
/flp3:logfile=Z:\output\\\Log_errors.log;errorsonly;verbosity=detailed 

/nologo 
/noconlog

これは、すべてのタイプのプロジェクト(Web、webservice、desktop、..)をコンパイルでき、(buildlog、error、warnings)としてログファイルを作成できます。

6
yavuz

返信が遅くなってすみません、そして入力アランに感謝します。残念ながらあなたの提案は機能しなかったので、私は次のことをしました。

  • [ビルドのデフォルト]タブで[_This build does not copy output files to a drop folder_]を選択します
  • [プロセス]タブでデフォルトのテンプレートを使用する
  • [プロセス]タブの下の_Output location_の下の_2. Build_の値としてAsConfiguredを選択します。
  • このMSBuild引数文字列を使用します。

    _/p:DeployOnBuild=True;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\\192.168.x.x\Nightly\MainBranch";AutoParameterizationWebConfigConnectionStrings=false_

この結果は、テストサイトのwebrootとして使用する次のフォルダーです:_\\192.168.x.x\Nightly\MainBranch\PackageTmp_。 PackageTmpフォルダーを持たないことを好むため、これは明らかに最適ではありません。また、同じソリューションに複数のWebアプリケーションが存在する場合の動作もテストしていませんが、この問題にこれ以上時間をかけることはできません。

なぜマイクロソフトがこのような単純なタスクをそれほど複雑にしたのか、私には本当にわかりません。

1
Anders Rosten