31
Help us understand the problem. What are the problem?

posted at

updated at

【VisualStudio】ビルドをバッチで行う

もくじ
https://qiita.com/tera1707/items/4fda73d86eded283ec4f

ビルドの自動化関連

やりたいこと

複数のソリューション(sln)が絡むシステムをまとめて変更するときに、それぞれのslnをVisualStudioで立ち上げてメニューからビルド、とするのが面倒かつ間違いが発生しやすい。
batをダブルクリックしたら、決まった手順でビルドをしてくれるようにしたい。

MSBuildを使う

MSBuildは、VisualStudioがない環境でもアプリケーションをビルドできるツール。
MSBuildを使うと、VisualStduioのメニューから行っていたビルドを自動化できる。

※1つのプロジェクト、ソリューションだけをビルドするときはメニューからの操作で問題ないが、例えばライブラリ作成用のソリューションと、それを使う側のソリューションを別に作っている場合などは、各ソリューションから手でビルドすると大変なので、コマンドで一括ビルドできるようにしておくと便利。

前提

  • 普段はVisualStudioで開発をしていて、ソリューションファイル(.sln)が存在している状況を想定。

処理の流れ

処理の流れとしては、

  • 開発者用コマンドプロンプトを起動
  • MSBuildでビルド実施

となる。以下、サンプル。

build.bat
rem まず開発者用コマンドプロンプトを起動してから
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat"

rem MSBuildでビルドする
cd %~dp0
MSBuild %slnファイルのパス% /t:clean;rebuild /p:Configuration=Release;Platform="Any CPU"
if %ERRORLEVEL% neq 0 (
    echo ErrorLevel:%ERRORLEVEL%
    echo ビルド失敗
)

参考

MSBuildでコマンドラインからビルドする
http://sh-yoshida.hatenablog.com/entry/2017/05/27/012755

MS Build
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/msbuild?view=vs-2019

MSBuild command-line reference
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2019

=======

(おまけ)Nugetパッケージ復元の自動化

nugetも、コマンドで復元できる。
slnをnuget.exeに食わせてやれば、slnから必要なパッケージを読み取って、復元してくれる。

バージョン管理(svnなど)に外部のパッケージは入れたくないが、ビルドするときにはそのへんも復元したい、という場合に、上のMSBuildと組み合わせて、まずnuget復元してからビルド、とかすると便利。

やり方

nuget.exeを置いたフォルダで

a.bat
cd %~dp0
.\NuGet restore <slnファイルのパス>
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
31
Help us understand the problem. What are the problem?