通常プロジェクトやソリューションをビルドする時は、Visual Studioを起動し、ビルドするプロジェクトを開き、ビルドを行います。しかし複数のプロジェクトを一度にビルドしたい場合などでは、いちいちこのような作業を行うのは面倒です。ここでは、コマンドラインからプロジェクトやソリューションのビルドを行えるツールを紹介します。
「MSBuild.exe」を使えば、コマンドラインからプロジェクトやソリューションをビルドすることができます。MSBuild.exeは、.NET Framework 2.0以降に含まれているようです。
MSBuild.exeが存在している場所は、.NET Framework 2.0ならば、
C:\Windows\Microsoft.NET\Framework\v2.0.50727
や
C:\Windows\Microsoft.NET\Framework64\v2.0.50727
のようなフォルダになります。
MSBuild.exeを使用して「Sample1.csproj」というプロジェクトをリリース(Release)構成でビルドするコマンドは、
msbuild.exe /p:Configuration=Release Sample1.csproj
のようになります。なおプロジェクトファイルの代わりにソリューションファイル(.sln)を指定することもできます。
MSBuild.exeで使用できるコマンドラインスイッチは、「MSBuild コマンド ライン リファレンス」にあります。または、「msbuild.exe /?」というコマンドで表示することもできます。
補足:上記例で使用している「/p:name=value」というコマンドは、プロジェクトの設定を変更するために使用します。例えば「/p:Configuration=Release;Platform="Any CPU"U;OutputDir="out\Release"」とすると、構成は「Release」、対象のCPUは「Any CPU」、ビルド出力パスは「out\Release」になります。詳しくは、「MSBuild プロジェクトの共通プロパティ」をご覧ください。
次のようなバッチファイル(拡張子「.bat」のテキストファイル)を作成して実行すると、カレントディレクトリ以下にあるすべてのソリューションファイルをリリース構成でビルドできます。
for /R %%i in (*.sln) do (MSBuild.exe /p:Configuration=Release "%%i") pause
補足:上記の例では、パスの通った場所に「MSBuild.exe」があることが前提となっています。そうでない場合は、「MSBuild.exe」をフルパス(または相対パス)で記述してください。また、カレントディレクトリではなく、特定のディレクトリ以下を調べたいという場合は、「/R」の後にそのディレクトリのパスを記述してください。
補足:MSBuild.exeが遅いという場合は、「/m」スイッチを試してみてください。「/m」を使用すると、同時実行プロセス数を増やすことができます。詳しくは、「MSBuild での複数のプロジェクトの並行ビルド」をご覧ください。
Devenv(Devenv.exeやDevenv.com)を使用してコマンドラインからプロジェクトやソリューションをビルドすることもできます。ただし、MSDNによると、ビルド関連のタスクはMSBuildを使用することが推奨されています。
Devenv.exeが存在している場所は、Visual Studio .NET 2003ならば、
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE
のようなフォルダになります。
補足:Devenv.exeの場所は、Visual Studioのショートカットのリンク先を調べれば分かります。
補足:「No devenv file in Microsoft visual Express 10」によると、Visual Studio Expressの場合、Devenv.exeは存在しません。代わりに、vcexpress.exeやvbexpress.exeやwdexpress.exeなどになるようです。
例えば、Devenv.exeを使用して「Sample1.csproj」というプロジェクトをリリース(Release)構成でビルドするコマンドは、
devenv /build release Sample1.csproj
のようになります。なおプロジェクトファイルの代わりにソリューションファイル(.sln)を指定することもできます。
Devenv.exeにはこれ以外にも様々なコマンドラインスイッチがあり、コマンドラインによるプロジェクトのリビルドや、消去、オプションを指定してのVisual Studioの起動などを行うことができます。詳しくは、「Devenv コマンド ライン スイッチ」をご覧ください。
以下に、指定されたフォルダ以下にあるすべてのソリューションファイルをDevenvでビルドするVBScriptを紹介します。これを「VBS」という拡張子のテキストファイルに保存し、使う時はこのファイルにフォルダをドロップしてください。
Option Explicit dim ConfigName, devenvPath 'ソリューション構成 ConfigName = "release" 'devenvのパス devenvPath = """C:\Program Files\" + _ "Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.exe""" dim WshShell, fso, objArgs, dic Set WshShell = WScript.CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Set dic = CreateObject("Scripting.Dictionary") '引数取得 set objArgs = WScript.Arguments GetAllSolutionFiles objArgs(0) dim res, f for each f in dic.Items res = MsgBox(f, vbYesNoCancel, "buildしますか?") if res = vbYes then WshShell.Run devenvPath + " /build " + ConfigName + _ " """ + f + """",0,true elseif res = vbCancel then exit for end if next MsgBox CStr(dic.Count) + "個のslnファイルがありました" sub GetAllSolutionFiles(strFolder) dim str, s if fso.FolderExists(strFolder) = false then exit sub GetSolutionFiles strFolder 'サブフォルダで実行 dim folder, subfolders set folder = fso.GetFolder(strFolder) set subfolders = folder.SubFolders for each s in subfolders GetAllSolutionFiles s next end sub sub GetSolutionFiles(strFolder) dim folder, files, f if fso.FolderExists(strFolder) = false then exit sub 'フォルダ内のすべてのファイル set folder = fso.GetFolder(strFolder) set files = folder.Files for each f in files if StrComp(fso.GetExtensionName(f),"sln",vbTextCompare)=0 then dic.Add f, f end if next end sub