DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

コマンドラインによりプロジェクトをビルドする
あるフォルダ以下にあるプロジェクトをすべてビルドする

通常プロジェクトやソリューションをビルドする時は、Visual Studioを起動し、ビルドするプロジェクトを開き、ビルドを行います。しかし複数のプロジェクトを一度にビルドしたい場合などでは、いちいちこのような作業を行うのは面倒です。ここでは、コマンドラインからプロジェクトやソリューションのビルドを行えるツールを紹介します。

MSBuildを使用する方法

「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」のテキストファイル)を作成して実行すると、カレントディレクトリ以下にあるすべてのソリューションファイルをリリース構成でビルドできます。

補足:上記の例では、パスの通った場所に「MSBuild.exe」があることが前提となっています。そうでない場合は、「MSBuild.exe」をフルパス(または相対パス)で記述してください。また、カレントディレクトリではなく、特定のディレクトリ以下を調べたいという場合は、「/R」の後にそのディレクトリのパスを記述してください。
補足:MSBuild.exeが遅いという場合は、「/m」スイッチを試してみてください。「/m」を使用すると、同時実行プロセス数を増やすことができます。詳しくは、「MSBuild での複数のプロジェクトの並行ビルド」をご覧ください。

Devenvを使用する方法

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」という拡張子のテキストファイルに保存し、使う時はこのファイルにフォルダをドロップしてください。

VBScript
コードを隠すコードを選択
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
  • 履歴:
  • 2014/8/23 MSBuildを使用する方法を追加。Devenv.exeがVisual Studio Expressには存在しない説明を追加など。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。