2013-06-13T00:14:02の更新内容

programming/netfx/msbuild/index.wiki.txt

current previous
1,10 1,8
 
${smdncms:title,MSBuild}
${smdncms:title,MSBuild}
~
${smdncms:keywords,MSBuild,xbuild,コマンド,プロジェクト,ビルド}
${smdncms:keywords,MSBuild}
 

        

        
~
.NET用ビルドエンジン「&msdn(netfx,id,0k6kkbsd){MSBuild};」の使い方と、簡単なサンプル。 MSBuildを使うことでコマンドラインからソリューション・プロジェクトのビルドを行ったり、高度なバッチ処理を行ったりすることができる。
.NET用ビルドエンジン「&msdn(netfx,id,0k6kkbsd){MSBuild};」の使い方と、簡単なサンプル。
 

        

        
+
-関連するページ
+
--[[programming/tips/msdos_cmd_tips]]
 
-参考資料
-参考資料
 
--&msdn(netfx,id,0k6kkbsd){MSBuild リファレンス};
--&msdn(netfx,id,0k6kkbsd){MSBuild リファレンス};
 
---&msdn(netfx,id,5dy88c2e){MSBuild プロジェクト ファイル スキーマ リファレンス};
---&msdn(netfx,id,5dy88c2e){MSBuild プロジェクト ファイル スキーマ リファレンス};
14,564 12,83
 

        

        
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
~
*MSBuildの基本
*基本
+
MSBuildの基本的な使い方とビルド方法。
 

        

        
~
**パスを通す
**MSBuildを使うための準備、パスを通す
+
まず、環境変数PATHを設定してMSBuildのパスを通す。
+

          
+
***.NET Framework
 
「システムのプロパティ」→「詳細設定」→「環境変数」でPathに下記のパスを追加する。
「システムのプロパティ」→「詳細設定」→「環境変数」でPathに下記のパスを追加する。
~

          
#code(bat){{
~
#code{{
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
+
C:\Windows\Microsoft.NET\Framework\v4.0.30319
 
}}
}}
+

          
 
または、コマンドライン上で下記のコマンドを入力する。
または、コマンドライン上で下記のコマンドを入力する。
+

          
 
#code(bat){{
#code(bat){{
~
@Set PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v4.0.30319
@Set Path=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;%PATH%
 
}}
}}
+

          
 
パスを通したら、MSBuildが起動するか確かめる。
パスを通したら、MSBuildが起動するか確かめる。
+

          
 
#prompt{{
#prompt{{
-
G:\msbuild>msbuild /version
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
E:\test>msbuild /version
2.0.50727.42
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
4.0.30319.17929
 
}}
}}
+

          
 
上記のようにバージョンが表示されれば問題なし。
上記のようにバージョンが表示されれば問題なし。
 

        

        
+
***Mono
+
シェル上で下記のコマンドを入力する。 (Monoが/opt/mono/以下にインストールされている場合の例)
+

          
+
#code(sh){{
+
export PATH=/opt/mono/bin:$PATH
+
}}
+

          
+
パスを通したら、MonoのMSBuild互換実装であるXBuildが起動するか確かめる。
+

          
+
#prompt{{
+
$ xbuild /version
+
XBuild Engine Version 2.10.8.0
+
Mono, Version 2.10.8.0
+
Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011.
+
}}
+

          
+
上記のようにバージョンが表示されれば問題なし。 XBuildはコマンド名がxbuildとなっている点を除いて、コマンドラインオプションはすべてMSBuildと同じ。
+

          
+

          
+
**MSBuildを使ったビルド
+
MSBuildの引数にソリューションファイル(*.sln)やプロジェクトファイル(*.csproj, *.vbproj)を指定することでソリューション・プロジェクトのビルドを行うことができる。
+

          
+
#prompt(ソリューションファイルをビルドする例){{
+
E:\test>msbuild sample.sln
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
このソリューション内のプロジェクトを 1 度に 1 つずつビルドします。並行ビルドを有効にするには、"/m" スイッチを追加してください。
+
2013/06/12 23:00:48 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.sln" (既定のターゲット)。
+
ValidateSolutionConfiguration:
+
  ソリューション構成 "Debug|Any CPU" をビルドしています。
+
プロジェクト "E:\test\sample.sln" (1) は、ノード 1 上に "E:\test\sample.csproj" (2) をビルドしています (既定のターゲット)。
+
EntityDeploy:
+
  Processing 0 EDMX files.
+
  Finished processing 0 EDMX files.
+
PrepareForBuild:
+
  ディレクトリ "bin\Debug\" を作成しています。
+
  md "bin\Debug\"
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
プロジェクト "E:\test\sample.csproj" (既定のターゲット) のビルドが完了しました。
+
プロジェクト "E:\test\sample.sln" (既定のターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.69
+
}}
+

          
+
#prompt(プロジェクトファイルをビルドする例){{
+
E:\test>msbuild sample.csproj
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
2013/06/12 23:01:16 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.csproj" (既定のターゲット)。
+
EntityDeploy:
+
  Processing 0 EDMX files.
+
  Finished processing 0 EDMX files.
+
PrepareForBuild:
+
  ディレクトリ "bin\Debug\" を作成しています。
+
  md "bin\Debug\"
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
プロジェクト "E:\test\sample.csproj" (既定のターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
 

        

        
+
経過時間 00:00:00.62
+
}}
+

          
+

          
+
**MSBuildのコマンドラインオプション [#Option]
+
***ビルド動作の指定 (/targetオプション) [#Option_Target]
+
/target(または/t)オプションを使うことでビルドの動作([[ターゲット>#Target]])を指定できる。 例えば、Cleanを指定すれば一時ファイルの削除、Runを指定すればビルド済みの実行可能ファイルの実行を行うことができる。 以下のようなターゲットを/target:&var{targets};の形式で指定することができる。 ターゲットはカンマ '','' またはセミコロン '';'' で区切ることで複数することができる。 この場合、ターゲットが指定された順に動作する。 プロジェクトファイルではデフォルトのターゲットは「Build」になっているので、ターゲットを指定しない場合は「Build」の動作でプロジェクトのビルドが行われる。
+

          
+
|*/targetオプションで指定できるターゲットの例
+
|~ターゲット|~動作|h
+
|Build|ビルド|
+
|Clean|クリーン&br;一時ファイルやビルド済みファイルを削除する|
+
|Rebuild|リビルド&br;(Build;Clean)|
+
|Run|実行&br;ビルド済み実行可能ファイルの実行を行う|
+

          
+
たとえば、
+

          
+
#code(cs){{
+
using System;
+

          
+
class Program
+
{
+
  static void Main(string[] args)
+
  {
+
    Console.WriteLine("Hello, world!");
+
  }
+
}
+
}}
+

          
+
上記のようなソースを含むプロジェクトファイルをビルドする際、ターゲットを指定せずにMSBuildに渡した場合は次のような動作となる。
+

          
+
#prompt{{
+
E:\test>msbuild sample.csproj
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
2013/06/12 23:04:48 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.csproj" (既定のターゲット)。
+
EntityDeploy:
+
  Processing 0 EDMX files.
+
  Finished processing 0 EDMX files.
+
PrepareForBuild:
+
  ディレクトリ "bin\Debug\" を作成しています。
+
  md "bin\Debug\"
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
プロジェクト "E:\test\sample.csproj" (既定のターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:01.35
+
}}
 

        

        
~
一方、オプション「/target:Rebuild,Run」を指定してビルドすると次のような動作となる。
**まずはHello, world! (Messageタスク)
+

          
+
#prompt{{
+
E:\test>msbuild sample.csproj /target:Rebuild,Run
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
2013/06/12 23:05:39 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.csproj" (Rebuild;Run ターゲット)。
+
CoreClean:
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
EntityClean:
+
  Successfully cleaned the output for 0 EDMX files.
+
EntityDeploy:
+
  Processing 0 EDMX files.
+
  Finished processing 0 EDMX files.
+
PrepareForBuild:
+
  ディレクトリ "bin\Debug\" を作成しています。
+
  md "bin\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
Run:
+
  E:\test\bin\Debug\sample.exe 
+
  Hello, world!
+
プロジェクト "E:\test\sample.csproj" (Rebuild;Run ターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.80
+
}}
+

          
+

          
+

          
+
***ビルド構成・コンパイルスイッチの指定 (/propertyオプション) [#Option_Property]
+
/property(または/p)オプションを使うことでビルド時に使用するプロジェクトの[[プロパティ>#PropertyGroup]](ビルド構成やコンパイルスイッチなど)を指定することができる。 「/property:&var{name};=&var{value};」のように、変更したいプロパティ名とその値を指定する。
+

          
+
****ビルド構成の指定 (Configurationプロパティ)
+
Configurationプロパティを指定することで、ビルド構成を指定してビルドすることが出来る。 たとえば、
+

          
+
#code(cs){{
+
using System;
+

          
+
class Program
+
{
+
  static void Main(string[] args)
+
  {
+
#if DEBUG
+
    Console.WriteLine("Debugビルドです");
+
#else
+
    Console.WriteLine("Releaseビルドです");
+
#endif
+
  }
+
}
+
}}
+

          
+
上記のようなソースを含むプロジェクトファイルをビルドする際、「/property:Configuration=Release」を指定してビルドした場合は次のようにRelease構成でのビルドを行う動作となる。
+

          
+
#prompt{{
+
E:\test>msbuild sample.csproj /target:Build,Run /property:Configuration=Release
+

          
+
    :
+
    :
+
(途中省略)
+
    :
+
    :
+

          
+
PrepareForBuild:
+
  ディレクトリ "bin\Release\" を作成しています。
+
  md "bin\Release\"
+
  ディレクトリ "obj\Release\" を作成しています。
+
  md "obj\Release\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Release\sample.exe" から "bin\Release\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Release\sample.exe" "bin\Release\sample.exe"
+
  sample -> E:\test\bin\Release\sample.exe
+
  "obj\Release\sample.pdb" から "bin\Release\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Release\sample.pdb" "bin\Release\sample.pdb"
+
Run:
+
  E:\test\bin\Release\sample.exe 
+
  Releaseビルドです
+
プロジェクト "E:\test\sample.csproj" (Build;Run ターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.57
+
}}
+

          
+
「/property:Configuration=Debug」と指定すればDebug構成のビルドとなるが、デフォルトではConfigurationの値は "Debug" となっているので明示的に指定しなくてもDebug構成でのビルドが行われる。
+

          
+
#prompt{{
+
E:\test>msbuild sample.csproj /target:Build,Run
+

          
+
    :
+
    :
+
(途中省略)
+
    :
+
    :
+

          
+
PrepareForBuild:
+
  ディレクトリ "bin\Debug\" を作成しています。
+
  md "bin\Debug\"
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
Run:
+
  E:\test\bin\Debug\sample.exe 
+
  Debugビルドです
+
プロジェクト "E:\test\sample.csproj" (Build;Run ターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.56
+
}}
+

          
+

          
+
****コンパイルスイッチの指定 (DefineConstantsプロパティ)
+
DefineConstantsプロパティを指定することで、コンパイルスイッチを指定してビルドすることが出来る。 たとえば、
+

          
+
#code(cs){{
+
using System;
+

          
+
class Program
+
{
+
  static void Main(string[] args)
+
  {
+
#if DEBUG
+
    Console.WriteLine("DEBUGは有効です");
+
#endif
+

          
+
#if PLATFORM_WIN32
+
    Console.WriteLine("PLATFORM_WIN32は有効です");
+
#endif
+

          
+
#if PLATFORM_WINNT
+
    Console.WriteLine("PLATFORM_WINNTは有効です");
+
#endif
+
  }
+
}
+
}}
+

          
+
上記のようなソースを含むプロジェクトファイルをビルドする際、「/property:DefineConstants="DEBUG;PLATFORM_WIN32"」を指定してビルドした場合は次のような実行結果となる。
+

          
+
#prompt{{
+
E:\test>msbuild sample.csproj /target:Build,Run /property:DefineConstants="DEBUG;PLATFORM_WIN32"
+

          
+
    :
+
    :
+
(途中省略)
+
    :
+
    :
+

          
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;PLATFORM_WIN32 /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
Run:
+
  E:\test\bin\Debug\sample.exe 
+
  DEBUGは有効です
+
  PLATFORM_WIN32は有効です
+
プロジェクト "E:\test\sample.csproj" (Build;Run ターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.58
+
}}
+

          
+

          
+
****出力先の指定 (OutputPathプロパティ)
+
OutputPathプロパティを指定することで、ファイルの出力先を指定してビルドすることが出来る。
+

          
+
#prompt{{
+
E:\test>msbuild sample.csproj /property:OutputPath="E:\test\output"
+

          
+
    :
+
    :
+
(途中省略)
+
    :
+
    :
+

          
+
PrepareForBuild:
+
  ディレクトリ "E:\test\output\" を作成しています。
+
  md "E:\test\output\"
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "E:\test\output\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "E:\test\output\sample.exe"
+
  sample -> E:\test\output\sample.exe
+
  "obj\Debug\sample.pdb" から "E:\test\output\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "E:\test\output\sample.pdb"
+
プロジェクト "E:\test\sample.csproj" (既定のターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.47
+
}}
+

          
+
***ログ粒度の指定 (/verbosityオプション) [#Option_Verbosity]
+
/verbosity(または/v)オプションを使うことでMSBuildが出力するログの詳細度を指定することができる。 指定できる詳細度には次のようなものがある(詳細度の低い順)。
+

          
+
+quiet
+
+minimal
+
+normal (指定しなかった場合のデフォルト)
+
+detailed
+
+diagnostic
+

          
+
#prompt(/verbosity:normalの出力例){{
+
E:\test>msbuild sample.csproj /verbosity:normal
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
2013/06/12 23:23:27 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.csproj" (既定のターゲット)。
+
EntityDeploy:
+
  Processing 0 EDMX files.
+
  Finished processing 0 EDMX files.
+
PrepareForBuild:
+
  ディレクトリ "bin\Debug\" を作成しています。
+
  md "bin\Debug\"
+
  ディレクトリ "obj\Debug\" を作成しています。
+
  md "obj\Debug\"
+
CoreCompile:
+
  C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\sample.exe /target:exe Program.cs Properties\AssemblyInfo.cs
+
CopyFilesToOutputDirectory:
+
  "obj\Debug\sample.exe" から "bin\Debug\sample.exe" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.exe" "bin\Debug\sample.exe"
+
  sample -> E:\test\bin\Debug\sample.exe
+
  "obj\Debug\sample.pdb" から "bin\Debug\sample.pdb" へファイルをコピーしています。
+
  copy /y "obj\Debug\sample.pdb" "bin\Debug\sample.pdb"
+
プロジェクト "E:\test\sample.csproj" (既定のターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.49
+
}}
+

          
+
#prompt(/verbosity:minimalの出力例){{
+
E:\test>msbuild sample.csproj /verbosity:minimal
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+

          
+
  sample -> E:\test\bin\Debug\sample.exe
+
}}
+

          
+
#prompt(/verbosity:quietの出力例){{
+
E:\test>msbuild sample.csproj /verbosity:minimal
+

          
+
Microsoft (R) Build Engine バージョン 4.0.30319.17929
+
[Microsoft .NET Framework、バージョン 4.0.30319.18034]
+
Copyright (C) Microsoft Corporation. All rights reserved.
+
}}
+

          
+
/nologoオプションと併用することでバナー表示も省略できる。
+

          
+
#prompt(/nologと併用した場合の出力例){{
+
E:\test>msbuild sample.csproj /verbosity:minimal /nologo
+

          
+
  sample -> E:\test\bin\Debug\sample.exe
+
}}
+

          
+
detailedおよびdiagnosticでは非常に詳細なログが出力される。
+

          
+

          
+

          
+
*プロジェクトファイルの記述方法
+
MSBuildは、Visual Studioなどが生成するプロジェクトファイルだけでなく、&msdn(netfx,id,5dy88c2e){MSBuild形式のプロジェクトファイルスキーマ};に則ったファイルをビルドすることができる。 プロジェクトのビルド以外にも様々なバッチ処理を記述することもできる。
+

          
+
**まずはHello, world! (Messageタスク) [#MessageTask]
 
&msdn(netfx,id,6yy0yx8d){Messageタスク};を使って「Hello, world!」と表示するだけのビルドファイルを作る。 HelloWorld.msbuild.xmlというファイルを作成し、下記の内容を書き込む。
&msdn(netfx,id,6yy0yx8d){Messageタスク};を使って「Hello, world!」と表示するだけのビルドファイルを作る。 HelloWorld.msbuild.xmlというファイルを作成し、下記の内容を書き込む。
 

        

        
~
#code(xml,HelloWorld.msbuild.xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
-
    DefaultTargets="Build">
 
    <Target Name="Build">
    <Target Name="Build">
+
        <!-- 文字列を出力する -->
 
        <Message Text="Hello, world!"/>
        <Message Text="Hello, world!"/>
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
+

          
 
ファイルが作成できたら、msbuildに作成したファイルを渡して「ビルド」を実行させる。
ファイルが作成できたら、msbuildに作成したファイルを渡して「ビルド」を実行させる。
+

          
 
#prompt{{
#prompt{{
~
E:\test>msbuild HelloWorld.msbuild.xml
G:\msbuild>msbuild HelloWorld.msbuild.xml
 
}}
}}
-
すると、下記のように表示される。
-
#prompt{{
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
すると、下記のように表示される。
ビルドが 2006/12/06 23:43:33 を開始しました。
-
__________________________________________________
-
プロジェクト "G:\msbuild\HelloWorld.msbuild.xml" (既定のターゲット):
 

        

        
~
#prompt{{
ターゲット Build:
~
2013/06/12 23:35:49 にビルドを開始しました。
    Hello, world!
+
ノード 1 上のプロジェクト "E:\test\HelloWorld.msbuild.xml" (既定のターゲット)。
+
Build:
+
  Hello, world!
+
プロジェクト "E:\test\HelloWorld.msbuild.xml" (既定のターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.06
経過時間 00:00:00.35
 
}}
}}
~

          
上記のように「ビルド」結果が表示される。 ここでの要点は下記の通り。
+
上記のように「ビルド」の結果が表示される。 ここでの要点は次の通り。
+

          
 
-XMLで書かれた「プロジェクトファイル」をMSBuildに渡すと、その内容に従って「ビルド」が行われる
-XMLで書かれた「プロジェクトファイル」をMSBuildに渡すと、その内容に従って「ビルド」が行われる
~
--中身がスキーマに則ったXMLであれば、拡張子はxmlでなくてもOK(例えば.vbprojなど)
-中身がXMLであれば、拡張子はxmlでなくてもOK(例えば.vbprojなど)
~
--プロジェクトファイルはXMLの形式だが、XML宣言(?xml〜?)は無くても特にエラーとはならず正常に動作する
-プロジェクトファイルはXMLの形式だが、XML宣言(?xml〜?)は無くても特にエラーとはならず正常に動作する
~
--プロジェクトファイルのルート要素はProjectで、その要素の中で様々な動作を定義する
-プロジェクトファイルのルート要素はProjectで、その要素の中で様々な動作を定義する
~
-Target要素はビルドの[[ターゲット>#Target]]を定義する要素で、ビルドの動作を定義する
-Target要素はビルドの「ターゲット」を定義する要素で、ここではデフォルトでこのターゲットをビルドするようにしている
~
--よく使われるターゲットの例として、ビルド済みファイルの削除を行うClean、ソースファイルのコンパイルを行うBuild、ビルドした実行可能ファイルの実行を行うRunなどがある
-Message要素(Messageはタスクと呼ばれる)を使用すると、任意の文字列を出力させることができる(Messageはビルド中の動作をログに出力するために用いる)
+
--この例では、Message要素を使ってメッセージを表示するターゲットにBuildという名前を付けている
+
--Project要素のDefaultTargets属性でターゲットBuildを指定しているため、デフォルトでこのターゲットがビルドされる
+
-Message要素を使用すると、任意の文字列を出力させることができる
+
--Messageは[[タスク>#Task]]と呼ばれるもののうちの1つ
+
--Messageはビルド中の動作をログに出力するために用いることができる
+
--出力させる文字列はText属性で指定することができる
+
--Text属性に[[プロパティ>#PropertyGroup]]や[[アイテム>#ItemGroup]](一種の定数や変数)を指定することでそれらの内容を出力させることもできる
+

          
 

        

        
+
**プロパティ(PropertyGroup) [#PropertyGroup]
+
プロパティ(&msdn(netfx,id,t4w159bs){PropertyGroup};)を使った例。 PropertyGroup要素を用いるとプロパティを宣言出来る。 プロパティは一種の定数のようなものであり、PropertyGroupの子要素として任意の名前で定義することができる。 Messageタスク等でプロパティの値を参照する場合は、「$(&var{プロパティ名};)」とすることでその値を参照できる。
 

        

        
-
**プロパティ(PropertyGroup)
-
プロパティ(&msdn(netfx,id,t4w159bs){PropertyGroup};)を使った例(test1.msbuild.xml)
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
~
    <!-- プロパティを宣言する -->
    DefaultTargets="Build">
-

          
 
    <PropertyGroup>
    <PropertyGroup>
 
        <AssemblyName>Test1</AssemblyName>
        <AssemblyName>Test1</AssemblyName>
 
        <Configuration>Debug</Configuration>
        <Configuration>Debug</Configuration>
581,7 98,6
 
    </PropertyGroup>
    </PropertyGroup>
 

        

        
 
    <Target Name="Build">
    <Target Name="Build">
+
        <!-- プロパティの値を出力する -->
 
        <Message Text="AssemblyName : $(AssemblyName)"/>
        <Message Text="AssemblyName : $(AssemblyName)"/>
 
        <Message Text="Configuration : $(Configuration)"/>
        <Message Text="Configuration : $(Configuration)"/>
 
        <Message Text="OutputType : $(OutputType)"/>
        <Message Text="OutputType : $(OutputType)"/>
590,93 106,59
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
-
実行結果は次の通り。
-
#prompt{{
-
G:\msbuild>msbuild test1.msbuild.xml
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
#prompt(実行結果){{
ビルドが 2006/12/06 23:54:29 を開始しました。
~
E:\test>msbuild sample.msbuild.xml
__________________________________________________
-
プロジェクト "G:\msbuild\test1.msbuild.xml" (既定のターゲット):
 

        

        
~
2013/06/12 23:42:05 にビルドを開始しました。
ターゲット Build:
~
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
    AssemblyName : Test1
~
Build:
    Configuration : Debug
~
  AssemblyName : Test1
    OutputType : WinExe
~
  Configuration : Debug
    OutputPath : bin\Debug
~
  OutputType : WinExe
    Hoge : Hage
+
  OutputPath : bin\Debug
+
  Hoge : Hage
+
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.06
経過時間 00:00:00.04
 
}}
}}
-
PropertyGroup要素を用いるとプロパティを宣言出来る。 プロパティは一種の変数のようなものであり、PropertyGroupの子要素として任意の名前で定義することができる。 また、Messageタスク等でプロパティの値を参照する場合は、「$(プロパティ名)」とすることでその値を参照できる。
 

        

        
~
また、[[/propertyオプション>#Option_Property]]を指定した場合もプロパティを設定できる。 プロジェクトファイルに同名のプロパティが記述されている場合でも、/propertyオプションで指定された値が優先して使用される。
ここでの要点は下記の通り。
~

          
-PropertyGroup要素を用いるとプロパティを宣言出来る
+
#code(xml){{
+
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+

          
+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
+
    <PropertyGroup>
+
        <Configuration>Debug</Configuration>
+
    </PropertyGroup>
+

          
+
    <Target Name="Build">
+
        <Message Text="Configuration : $(Configuration)"/>
+
        <Message Text="OutputPath : $(OutputPath)"/>
+
    </Target>
+
</Project>
+
}}
+

          
+
#prompt(実行結果){{
+
E:\test>msbuild sample.msbuild.xml /property:Configuration=Release /property:OutputPath=..\build
+

          
+
2013/06/12 23:42:43 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
+
Build:
+
  Configuration : Release
+
  OutputPath : ..\build
+
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
+

          
+
ビルドに成功しました。
+
    0 個の警告
+
    0 エラー
+

          
+
経過時間 00:00:00.06
+
}}
+

          
+

          
+

          
+
ここでの要点は次の通り。
+
-PropertyGroup要素を用いると''プロパティ''を宣言出来る
 
-PropertyGroup要素の子要素の名前がそのままプロパティ名となる
-PropertyGroup要素の子要素の名前がそのままプロパティ名となる
 
-プロパティは任意の名前で定義できる
-プロパティは任意の名前で定義できる
~
-[[/propertyオプション>#Option_Property]]でビルド時にプロパティの値を変更できる
-プロパティの値を参照する場合は、「$(プロパティ名)」とする
~
-Messageタスクなどの文字列中でプロパティの値を参照する場合は、「$(&var{プロパティ名};)」とする

          
 

        

        
+
**ターゲット(Target) [#Target]
+
ターゲット(&msdn(netfx,id,t50z2hka){Target};)を使った例。 ターゲットはいくつかの[[タスク>#Task]]をひとまとめにして動作を定義するためのもの。 ターゲットを使うことで一連の手続き(タスク)をまとめて一種のメソッドのようなものを作成することができる。
 

        

        
-
**ターゲット(Target)
-
ターゲット(&msdn(netfx,id,t50z2hka){Target};)を使った例(test2.msbuild.xml)
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<!-- DefaultTargetsにClean;Buildを指定したプロジェクト -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Clean;Build">
    DefaultTargets="Clean;Build">
-

          
 
    <Target Name="Clean">
    <Target Name="Clean">
 
        <Message Text="Clean"/>
        <Message Text="Clean"/>
 
    </Target>
    </Target>
~

          
    
 
    <Target Name="BeforeBuild">
    <Target Name="BeforeBuild">
 
        <Message Text="BeforeBuild"/>
        <Message Text="BeforeBuild"/>
 
    </Target>
    </Target>
 

        

        
 
    <Target Name="Build">
    <Target Name="Build">
+
        <!-- BeforeBuildターゲットを呼び出す -->
 
        <CallTarget Targets="BeforeBuild"/>
        <CallTarget Targets="BeforeBuild"/>
+

          
 
        <Message Text="Build"/>
        <Message Text="Build"/>
+

          
+
        <!-- AfterBuildターゲットを呼び出す -->
 
        <CallTarget Targets="AfterBuild"/>
        <CallTarget Targets="AfterBuild"/>
 
    </Target>
    </Target>
 

        

        
685,78 167,76
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
-
このファイルを用いて、オプションとして「/t:Clean」を付けて実行する。 実行結果は次の通り。
-
#prompt{{
-
G:\msbuild>msbuild test2.msbuild.xml /t:Clean
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
#prompt(実行結果){{
ビルドが 2006/12/07 0:01:46 を開始しました。
~
E:\test>msbuild sample.msbuild.xml
__________________________________________________
-
プロジェクト "G:\msbuild\test2.msbuild.xml" (Clean ターゲット):
 

        

        
~
2013/06/12 23:43:17 にビルドを開始しました。
ターゲット Clean:
~
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
    Clean
+
Clean:
+
  Clean
+
BeforeBuild:
+
  BeforeBuild
+
Build:
+
  Build
+
AfterBuild:
+
  AfterBuild
+
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.07
経過時間 00:00:00.01
 
}}
}}
-
続いて、同じファイルを用いて、今度はオプション無しで実行する。 実行結果は次の通り。
-
#prompt{{
-
G:\msbuild>msbuild test2.msbuild.xml
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
動作させるターゲットを指定せずに実行する場合、MSBuildはデフォルトのターゲット(ProjectのDefaultTargets属性で指定されているターゲット)を実行する。 この例ではDefaultTargetsに"Clean;Build"を指定しているが、これは「Cleanの後にBuildを実行する」という意味になる。 そのため、まずCleanターゲットで定義された動作が先に動き、続いてBuildターゲットで定義された動作が動く。
ビルドが 2006/12/07 0:02:02 を開始しました。
-
__________________________________________________
-
プロジェクト "G:\msbuild\test2.msbuild.xml" (既定のターゲット):
 

        

        
~
さらにこのファイルでは、BuildターゲットにてCallTargetタスクを使用して別のターゲットを起動している。 そのため、Buildターゲットを動作させると
ターゲット Clean:
~

          
    Clean
~
+BeforeBuildターゲットが呼び出される
ターゲット Build:
~
++BeforeBuildターゲット内のMessageタスクが動作して文字列"BeforeBuild"を出力する
    ターゲット BeforeBuild:
~
+BuildターゲットのMessageタスクが動作して文字列"Build"を出力する
        BeforeBuild
~
+AfterBuildターゲットが呼び出される
    Build
~
++AfterBuildターゲット内のMessageタスクが動作して文字列"AfterBuild"を出力する
    ターゲット AfterBuild:
~

          
        AfterBuild
+
という動きになる。 なお、DefaultTargets属性と同様にCallTargetタスクでも複数のターゲットを指定することができる。
+

          
+
[[/targetオプション>#Option_Target]]を指定して実行すると、動作させるターゲットを指定することができる。 例えば、次のようにオプション"/t:Clean"を付けて実行するとターゲットCleanだけが動作する。
+

          
+
#prompt(実行結果){{
+
E:\test>msbuild sample.msbuild.xml /target:Clean
+

          
+
2013/06/12 23:43:40 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (Clean ターゲット)。
+
Clean:
+
  Clean
+
プロジェクト "E:\test\sample.msbuild.xml" (Clean ターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.06
経過時間 00:00:00.04
 
}}
}}
-
/tオプションを使用すると、ビルドするターゲットを変更することが出来る。 最初の例では「Clean」をビルドのターゲットとしたため、「<Target Name="Clean">」で定義した動作、つまり「Clean」の出力が行われた。
-

          
-
続く二番目での例では、ビルドのターゲットを指定しなかった。 この場合、ProjectのDefaultTargetsに指定されているターゲットが使用される。 ここでは「Clean;Build」が設定されているが、これは「Cleanの後にBuildを実行する」という意味になる。
-

          
-
そのため、まず「Clean」で定義された動作が先に動き、続いて「Build」で定義された動作が動く。 さらに二番目の例では、BuildターゲットでCallTargetタスクを使用している。 これは他のターゲットを呼び出すものなので、Buildターゲットを動作させると1.BeforeBuildターゲットが動作する、2.「Build」を出力する、3.AfterBuildターゲットが動作する、という動きになる。
 

        

        
 
ここでの要点は下記の通り。
ここでの要点は下記の通り。
~

          
-Target要素ではビルドの動作を定義する
~
-Target要素では1つ以上のタスクを記述してビルドの動作を定義する
-/tオプションを使用するとビルドするターゲットを指定できる
~
-/targetオプションを使用するとビルドするターゲットを指定できる
-/tを指定しなかった場合は、デフォルトのターゲットをビルドする
~
--/target:Cleanとした場合は、ターゲットCleanのみが動作する
-デフォルトのターゲットは、ProjectのDefaultTargetsで定義する
~
--/targetを指定しなかった場合は、デフォルトのターゲットをビルドする
-デフォルトのターゲットは、「Clean;Build」のように複数のターゲットを指定することも出来る
+
--デフォルトのターゲットは、ProjectのDefaultTargetsで定義する
 
-CallTargetタスクを使用すると、他のターゲットを呼び出すことが出来る
-CallTargetタスクを使用すると、他のターゲットを呼び出すことが出来る
+
-デフォルトのターゲットやCallTargetタスクに指定するターゲットには、「Clean;Build」のように複数のターゲットを指定することも出来る
 

        

        
 

        

        
 

        

        
 
**依存関係の定義(DependsOnTargets)
**依存関係の定義(DependsOnTargets)
~
TargetのDependsOnTargets属性を使用してターゲット同士の依存関係を定義した例。
TargetのDependsOnTargets属性を使用してターゲット同士の依存関係を定義した例(test3.msbuild.xml)
+

          
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
-
    DefaultTargets="Build">
-

          
 
    <Target Name="Clean">
    <Target Name="Clean">
 
        <Message Text="Clean"/>
        <Message Text="Clean"/>
 
    </Target>
    </Target>
765,7 245,6
 
        <Message Text="BeforeBuild"/>
        <Message Text="BeforeBuild"/>
 
    </Target>
    </Target>
 

        

        
+
    <!-- DependsOnTargetsにClean;BeforeBuildを指定したターゲット -->
 
    <Target Name="Build" DependsOnTargets="Clean;BeforeBuild">
    <Target Name="Build" DependsOnTargets="Clean;BeforeBuild">
 
        <Message Text="Build"/>
        <Message Text="Build"/>
 
        <CallTarget Targets="AfterBuild"/>
        <CallTarget Targets="AfterBuild"/>
776,30 255,33
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
-
実行結果は次の通り。
-
#prompt{{
-
G:\msbuild>msbuild test3.msbuild.xml
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
#prompt(実行結果){{
ビルドが 2006/12/07 0:15:49 を開始しました。
~
E:\test>msbuild sample.msbuild.xml
__________________________________________________
-
プロジェクト "G:\msbuild\test3.msbuild.xml" (既定のターゲット):
 

        

        
~
2013/06/12 23:44:10 にビルドを開始しました。
ターゲット Clean:
~
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
    Clean
~
Clean:
ターゲット BeforeBuild:
~
  Clean
    BeforeBuild
~
BeforeBuild:
ターゲット Build:
~
  BeforeBuild
    Build
~
Build:
    ターゲット AfterBuild:
~
  Build
        AfterBuild
+
AfterBuild:
+
  AfterBuild
+
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.07
経過時間 00:00:00.04
 
}}
}}
~

          
これはTargetの例に似ているが、CallTargetの代わりにDependsOnTargets属性を指定して依存関係を定義している。 DependsOnTargets属性に任意のターゲットが指定されている場合は、そのターゲットが先に呼び出される。 その後、Target要素の中で定義されている動作が動く。
+
これはTargetの例に似ているが、CallTargetタスクの代わりにDependsOnTargets属性を指定して依存関係を定義している。 DependsOnTargets属性に任意のターゲットが指定されている場合は、そのターゲットが先に呼び出される。 その後、Target要素の中で定義されている動作が動く。
 

        

        
 
この例では、Buildターゲットを動作させようとする場合は、依存関係にあるCleanとBeforeBuildを順に呼び出してから、Buildで定義されている動作を順に実行していく。
この例では、Buildターゲットを動作させようとする場合は、依存関係にあるCleanとBeforeBuildを順に呼び出してから、Buildで定義されている動作を順に実行していく。
 

        

        
808,100 290,95
 
-依存関係にあるターゲットは、そのターゲットで定義されている動作を実行するよりも先に呼び出される
-依存関係にあるターゲットは、そのターゲットで定義されている動作を実行するよりも先に呼び出される
 

        

        
 

        

        
~
**ターゲット・タスクを使った簡単なサンプル(Target, RemoveDir, MakeDir, Touch, Exec) [#Task]
**ターゲット・タスクを使った簡単なサンプル(Target, RemoveDir, MakeDir, Touch, Exec)
~
ここまでの例で使用してきたMessageタスクはメッセージを出力するものだが、これ以外にも様々なタスクが用意されている。 &msdn(netfx,id,xyfz6ddb){RemoveDir};, &msdn(netfx,id,s2448zz7){MakeDir};, &msdn(netfx,id,37fwbyt5){Touch};, &msdn(netfx,id,x8zx72cd){Exec};などのタスクを使った例。
&msdn(netfx,id,xyfz6ddb){RemoveDir};, &msdn(netfx,id,s2448zz7){MakeDir};, &msdn(netfx,id,37fwbyt5){Touch};, &msdn(netfx,id,x8zx72cd){Exec};などのタスクを使った例(test4.msbuild.xml)
+

          
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
-
    DefaultTargets="Build">
-

          
 
    <PropertyGroup>
    <PropertyGroup>
 
        <!-- 出力先 -->
        <!-- 出力先 -->
 
        <OutputPath>bin\</OutputPath>
        <OutputPath>bin\</OutputPath>
 
    </PropertyGroup>
    </PropertyGroup>
 

        

        
 
    <Target Name="Clean">
    <Target Name="Clean">
+
        <!-- ディレクトリを削除 -->
 
        <RemoveDir Directories="$(OutputPath)" />
        <RemoveDir Directories="$(OutputPath)" />
 
    </Target>
    </Target>
 

        

        
 
    <Target Name="Build">
    <Target Name="Build">
+
        <!-- 存在しない場合は出力ディレクトリを作成 -->
 
        <MakeDir Directories="$(OutputPath)" Condition="!Exists('$OutputPath')" />
        <MakeDir Directories="$(OutputPath)" Condition="!Exists('$OutputPath')" />
+

          
+
        <!-- 出力ディレクトリにファイルTest.txtを作成 -->
 
        <Touch Files="$(OutputPath)Test.txt" AlwaysCreate="True" />
        <Touch Files="$(OutputPath)Test.txt" AlwaysCreate="True" />
+

          
+
        <!-- DOSコマンドを実行する -->
 
        <Exec Command="date /t > $(OutputPath)Test.txt" />
        <Exec Command="date /t > $(OutputPath)Test.txt" />
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
-
実行結果は次の通り。 まずはターゲットを指定しないでデフォルトであるBuildターゲットを実行させた場合。
-
#prompt{{
-
G:\msbuild>msbuild test4.msbuild.xml
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
まずはターゲットを指定しないでデフォルトであるBuildターゲットを実行させた場合。
ビルドが 2007/02/11 22:16:16 を開始しました。
-
__________________________________________________
-
プロジェクト "G:\msbuild\test4.msbuild.xml" (既定のターゲット):
 

        

        
~
#prompt(実行結果){{
ターゲット Build:
~
E:\test>msbuild sample.msbuild.xml
    ディレクトリ "bin\" を作成しています。
~

          
    "AlwaysCreate" が指定されたため "bin\Test.txt" を作成しています。
~
2013/06/12 23:44:55 にビルドを開始しました。
    date /t > bin\Test.txt
+
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
+
Build:
+
  ディレクトリ "bin\" を作成しています。
+
  md "bin\"
+
  "AlwaysCreate" が指定されたため "bin\Test.txt" を作成しています。
+
  date /t > bin\Test.txt
+
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.36
経過時間 00:00:03.17
 
}}
}}
-
続いてターゲットを指定してCleanターゲットを実行させた場合
-
#prompt{{
-
G:\msbuild>msbuild test4.msbuild.xml /t:Clean
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
続いてターゲットを指定してCleanターゲットを実行させた場合。
ビルドが 2007/02/11 22:16:51 を開始しました。
-
__________________________________________________
-
プロジェクト "G:\msbuild\test4.msbuild.xml" (Clean ターゲット):
 

        

        
~
#prompt{{
ターゲット Clean:
~
E:\test>msbuild sample.msbuild.xml /target:Clean
    ディレクトリ "bin\" を削除しています。
+

          
+
2013/06/12 23:45:18 にビルドを開始しました。
+
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (Clean ターゲット)。
+
Clean:
+
  ディレクトリ "bin\" を削除しています。
+
  rd /s /q "bin\"
+
プロジェクト "E:\test\sample.msbuild.xml" (Clean ターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.13
経過時間 00:00:00.70
 
}}
}}
+

          
 
この例では、Buildターゲットを動作させた場合は、出力用のディレクトリbinを作成し、bin\Test.txtにターゲットを動作させた時間を記録している。 またCleanターゲットを指定した場合は、出力用のディレクトリbinを削除するようになっている。
この例では、Buildターゲットを動作させた場合は、出力用のディレクトリbinを作成し、bin\Test.txtにターゲットを動作させた時間を記録している。 またCleanターゲットを指定した場合は、出力用のディレクトリbinを削除するようになっている。
 

        

        
 
ここでの要点は下記の通り。
ここでの要点は下記の通り。
 
-MakeDirタスクを使用すると、ディレクトリを作成すことが出来る
-MakeDirタスクを使用すると、ディレクトリを作成すことが出来る
~
--MakeDirタスクにて作成するディレクトリは、Directories属性で指定する
-MakeDirタスクにて作成するディレクトリは、Directories属性で指定する
~
--MakeDirタスクにてCondition属性を指定すると、Conditionで指定している条件が真と評価される場合にのみディレクトリが作成される
-MakeDirタスクにてCondition属性を指定すると、Conditionで指定している条件が真と評価される場合にのみディレクトリが作成される
~
-RemoveDirタスクを使用すると、ディレクトリを削除することが出来る
-RemoveDirタスクを使用すると、ディレクトリを削除することが出来る(ディレクトリ内にファイルがあっても削除できる)
+
--RemoveDirタスクでは、ディレクトリ内にファイルがあってもディレクトリを削除できる
 
-Touchタスクを使用すると、空のファイルを作成することが出来る
-Touchタスクを使用すると、空のファイルを作成することが出来る
~
--TouchタスクにてAlwaysCreate属性にTrueを指定すると、ファイルが存在していない場合はファイルが作成される
-TouchタスクにてAlwaysCreate属性にTrueを指定すると、ファイルが存在していない場合はファイルが作成される
~
-Execタスクを使用すると、DOSコマンドを実行できる(この例では、現在の時刻をbin\Test.txtファイルに書き出している)
-Execタスクを使用すると、コマンドを実行できる(この例では、現在の時刻をbin\Test.txtファイルに書き出している)
+

          
 

        

        
 

        

        
+
**アイテム(ItemGroup) [#ItemGroup]
+
アイテム(&msdn(netfx,id,646dk05y){ItemGroup};)を使った例。
 

        

        
-
**アイテム(ItemGroup)
-
アイテム(&msdn(netfx,id,646dk05y){ItemGroup};)を使った例(test5.msbuild.xml)
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
~
    <!-- 入力ファイルの一覧を作成する -->
    DefaultTargets="Build">
-

          
 
    <ItemGroup>
    <ItemGroup>
~
        <!-- カレントディレクトリにあるbackup*.txtを除くすべての*.txtをTextFilesに格納する -->
        <!-- 入力ファイルの一覧を作成する -->
 
        <TextFiles Include="*.txt" Exclude="backup*.txt"/>
        <TextFiles Include="*.txt" Exclude="backup*.txt"/>
 

        

        
 
        <SourceFiles Include="Main.cs;Form.cs"/>
        <SourceFiles Include="Main.cs;Form.cs"/>
923,46 400,50
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
-
実行結果は次の通り。
-
#prompt{{
-
G:\msbuild>msbuild test5.msbuild.xml
-
Microsoft(R) Build Engine Version 2.0.50727.42
-
[Microsoft .NET Framework, Version 2.0.50727.42]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
 

        

        
~
#prompt(実行結果){{
ビルドが 2007/02/11 22:30:19 を開始しました。
~
E:\test>msbuild sample.msbuild.xml
__________________________________________________
-
プロジェクト "G:\msbuild\test5.msbuild.xml" (既定のターゲット):
 

        

        
~
2013/06/12 23:47:18 にビルドを開始しました。
ターゲット Build:
~
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
    TextFiles : test1.txt;test2.txt;test3.txt
~
Build:
    SourceFiles : Main.cs;Form.cs
~
  TextFiles : test1.txt;test2.txt;test3.txt
    ResourceFiles : Button.bmp;Background.jpg;Notice.wav
~
  SourceFiles : Main.cs;Form.cs
    ResourceFiles : Button.bmp, Background.jpg, Notice.wav
~
  ResourceFiles : Button.bmp;Background.jpg;Notice.wav
    ResourceFiles : Button.bmp/Background.jpg/Notice.wav
+
  ResourceFiles : Button.bmp, Background.jpg, Notice.wav
+
  ResourceFiles : Button.bmp/Background.jpg/Notice.wav
+
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.08
経過時間 00:00:00.64
 
}}
}}
~

          
ItemGroupはPropertyGroupと似ているが、こちらは主にファイルのリストなどの「アイテム」を定義するために用いる。
+
ItemGroupはPropertyGroupと似ているが、こちらは主にファイルのリストなどの「アイテム」を定義するために用いる。 タスクのパラメータとして引き渡す場合に用いる他、&msdn(netfx,id,3e54c37h){Copyタスク};で実際にコピーされたファイルの一覧を取得するなど、タスクの出力パラメータとしてもアイテムを得ることができる。
 

        

        
 
ここでの要点は下記の通り。
ここでの要点は下記の通り。
 
-ItemGroup要素を用いるとプロパティを宣言出来る
-ItemGroup要素を用いるとプロパティを宣言出来る
~
--ItemGroup要素の子要素の名前がそのままアイテム名となる
-ItemGroup要素の子要素の名前がそのままアイテム名となる
~
--アイテムは任意の名前で定義できる
-アイテムは任意の名前で定義できる
~
--アイテムの値を参照する場合は、「@(&var{アイテム名};)」とする
-アイテムの値を参照する場合は、「@(アイテム名)」とする
 
-Include属性でワイルドカードを指定した場合、カレントディレクトリにあるファイルのうち、ワイルドカードにマッチするファイルのみが指定される
-Include属性でワイルドカードを指定した場合、カレントディレクトリにあるファイルのうち、ワイルドカードにマッチするファイルのみが指定される
 
-Exclude属性を指定すると、ワイルドカードにマッチするファイルは除外される
-Exclude属性を指定すると、ワイルドカードにマッチするファイルは除外される
 
-Messageタスクで出力する際の区切り文字を変える場合は、アイテム名の後ろに使いたい区切り文字を指定する
-Messageタスクで出力する際の区切り文字を変える場合は、アイテム名の後ろに使いたい区切り文字を指定する
 

        

        
 

        

        
~
**タスク出力の取得 (Output) [#Output]
**タスク出力の取得 (Output)
~
&msdn(netfx,id,ms164287){Output要素};を使った例。
&msdn(netfx,id,ms164287){Output要素};を使った例(test.msbuild.xml)
+

          
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
-
    DefaultTargets="Build">
-

          
 
    <Target Name="Build">
    <Target Name="Build">
 
        <Delete Files="bar.txt">
        <Delete Files="bar.txt">
 
            <Output TaskParameter="DeletedFiles" ItemName="FilesDeleted" />
            <Output TaskParameter="DeletedFiles" ItemName="FilesDeleted" />
978,43 459,48
 
    </Target>
    </Target>
 
</Project>
</Project>
 
}}
}}
~

          
実行結果は次の通り。
~
#prompt(実行結果){{
#prompt{{
~
D:\>msbuild sample.msbuild.xml
D:\>msbuild test.msbuild.xml
~

          
Microsoft (R) Build Engine Version 3.5.30729.1
~
2013/06/12 23:48:02 にビルドを開始しました。
[Microsoft .NET Framework, Version 2.0.50727.3603]
~
ノード 1 上のプロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット)。
Copyright (C) Microsoft Corporation 2007. All rights reserved.
~
Build:

          
-
2010/04/15 0:04:48 にビルドを開始しました。
-
ノード 0 上のプロジェクト "D:\test.msbuild.xml" (既定のターゲット)。
-
  ファイル "bar.txt" を削除しています。
 
  "AlwaysCreate" が指定されたため "foo.txt" を作成しています。
  "AlwaysCreate" が指定されたため "foo.txt" を作成しています。
 
  "AlwaysCreate" が指定されたため "bar.txt" を作成しています。
  "AlwaysCreate" が指定されたため "bar.txt" を作成しています。
~
  "AlwaysCreate" が指定されたため "baz.txt" を作成しています。
  "baz.txt" のタッチ タスクを実行しています。
 
  bar.txt, foo.txtを削除しました。
  bar.txt, foo.txtを削除しました。
 
  foo.txt, bar.txt, baz.txtを更新しました。
  foo.txt, bar.txt, baz.txtを更新しました。
~
プロジェクト "E:\test\sample.msbuild.xml" (既定のターゲット) のビルドが完了しました。
プロジェクト "D:\test.msbuild.xml" (既定のターゲット) のビルドが完了しました。
-

          
 

        

        
 
ビルドに成功しました。
ビルドに成功しました。
~
    0 個の警告
    0 警告
 
    0 エラー
    0 エラー
 

        

        
~
経過時間 00:00:00.14
経過時間 00:00:00.10
 
}}
}}
+

          
 
Output要素を用いると、タスクの出力をアイテムもしくはプロパティとして取得できる。
Output要素を用いると、タスクの出力をアイテムもしくはプロパティとして取得できる。
 

        

        
 
ここでの要点は下記の通り。
ここでの要点は下記の通り。
 
-タスクの要素内でOutput要素を記述すると、タスクの出力を取得できる
-タスクの要素内でOutput要素を記述すると、タスクの出力を取得できる
~
--Output要素のTaskParameter属性で出力する値を指定する
-Output要素のTaskParameter属性で出力する値を指定する
~
--Output要素のItemName属性で出力先のアイテム名を指定する
-Output要素のItemName属性で出力先のアイテム名を指定する
~
--ItemName属性の代わりにPropertyName属性を使うことでプロパティ名を指定することもできる
PropertyName属性でプロパティ名を指定することもできる
 

        

        
~
*具体例
*具体的な例
 
**Cscタスクを使ってC#ファイルをコンパイルする
**Cscタスクを使ってC#ファイルをコンパイルする
 
&msdn(netfx,id,s5c8athz){Cscタスク};を用いると、cscコンパイラを使ってC#ソースファイルをコンパイルすることが出来る。 ここではいくつかのソースファイル、リソースファイルからWindows実行可能ファイルを生成するための例を示す。
&msdn(netfx,id,s5c8athz){Cscタスク};を用いると、cscコンパイラを使ってC#ソースファイルをコンパイルすることが出来る。 ここではいくつかのソースファイル、リソースファイルからWindows実行可能ファイルを生成するための例を示す。
 

        

        
 
#code(xml){{
#code(xml){{
 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 

        

        
~
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
-
    DefaultTargets="Build">
-

          
 
    <!-- プロパティを設定する -->
    <!-- プロパティを設定する -->
 
    <PropertyGroup>
    <PropertyGroup>
 
        <!-- アセンブリ名 -->
        <!-- アセンブリ名 -->
1149,14 635,192
 
}}
}}
 
ビルドに成功すると、コンパイルしたバイナリが起動し、ウィンドウが現れる。 ウィンドウを閉じてバイナリを終了すると、MSBuildの完了メッセージが出力される。
ビルドに成功すると、コンパイルしたバイナリが起動し、ウィンドウが現れる。 ウィンドウを閉じてバイナリを終了すると、MSBuildの完了メッセージが出力される。
 

        

        
-
**プロジェクトファイル(csproj, vbproj)をビルドする
-
プロジェクトファイル(csproj, vbproj)をmsbuildの引数として渡すことで、 そのプロジェクトをビルドすることが出来る。
-
#prompt{{
-
E:\msbuild>msbuild Sample.csproj
-
Microsoft(R) Build Engine Version 2.0.50727.312
-
[Microsoft .NET Framework, Version 2.0.50727.312]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
-

          
-
ビルドが 2007/11/02 7:01:41 を開始しました。
-
__________________________________________________
-
プロジェクト "E:\msbuild\Sample.csproj" (既定のターゲット):
-

          
-
ターゲット PrepareForBuild:
-
    ディレクトリ "bin\Debug\" を作成しています。
-
    ディレクトリ "obj\Debug\" を作成しています。
-
ターゲット CoreCompile:
-
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701
-
,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:C:\Windows\Micr
-
osoft.NET\Framework\v2.0.50727\System.dll /debug+ /debug:full /optimize- /out:ob
-
j\Debug\Sample.exe /target:exe Sample.cs
-
ターゲット CopyFilesToOutputDirectory:
-
    "obj\Debug\Sample.exe" から "bin\Debug\Sample.exe" へファイルをコピーしてい
-
ます。
-
    Sample -> E:\msbuild\bin\Debug\Sample.exe
-
    "obj\Debug\Sample.pdb" から "bin\Debug\Sample.pdb" へファイルをコピーしてい
-
ます。
-

          
-
ビルドに成功しました。
-
    0 警告
-
    0 エラー
-

          
-
経過時間 00:00:00.25
-
}}
-

          
-
プロジェクトファイルはデフォルトのターゲットが「Build」になっているので、ターゲットを指定しない場合はビルドが行われる。 また、CleanやRunといったターゲットを指定することも出来る。 たとえば、クリーンアップしてからビルド・実行したい場合は、ターゲットとして「/t:Clean;Build;Run」とすることで一連のタスクを実行できる。
-

          
-
たとえば、
-
#code(cs){{
-
using System;
-

          
-
class Program
-
{
-
  static void Main(string[] args)
-
  {
-
    Console.WriteLine("run with MSBuild");
-
  }
-
}
-
}}
-

          
-
このようなソースを含むプロジェクトファイルについて、ターゲットに「/t:Clean;Build;Run」を指定すると次のような実行結果となる。
-
#prompt{{
-
E:\msbuild>msbuild Sample.csproj /t:Clean;Build;Run
-
Microsoft(R) Build Engine Version 2.0.50727.312
-
[Microsoft .NET Framework, Version 2.0.50727.312]
-
Copyright (C) Microsoft Corporation 2005. All rights reserved.
-

          
-
ビルドが 2007/11/02 7:05:29 を開始しました。
-
__________________________________________________
-
プロジェクト "E:\msbuild\Sample.csproj" (Clean;Build;Run ターゲット):
-

          
-
ターゲット CoreClean:
-
    ファイル "bin\Debug\Sample.exe" を削除しています。
-
    ファイル "bin\Debug\Sample.pdb" を削除しています。
-
    ファイル "obj\Debug\Sample.exe" を削除しています。
-
    ファイル "obj\Debug\Sample.pdb" を削除しています。
-
ターゲット CoreCompile:
-
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701
-
,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:C:\Windows\Micr
-
osoft.NET\Framework\v2.0.50727\System.dll /debug+ /debug:full /optimize- /out:ob
-
j\Debug\Sample.exe /target:exe Sample.cs
-
ターゲット CopyFilesToOutputDirectory:
-
    "obj\Debug\Sample.exe" から "bin\Debug\Sample.exe" へファイルをコピーしてい
-
ます。
-
    Sample -> E:\msbuild\bin\Debug\Sample.exe
-
    "obj\Debug\Sample.pdb" から "bin\Debug\Sample.pdb" へファイルをコピーしてい
-
ます。
-
ターゲット Run:
-
    E:\msbuild\bin\Debug\Sample.exe
-
    run with MSBuild
-

          
-
ビルドに成功しました。
-
    0 警告
-
    0 エラー
-

          
-
経過時間 00:00:00.36
-
}}
-

          
-
**ビルド構成を指定してプロジェクトファイルをビルドする
-
/property(または/p)を使用してConfigurationプロパティを指定することで、ビルド構成を指定してビルドすることが出来る。 たとえば、
-
#code(cs){{
-
using System;
-

          
-
class Program
-
{
-
  static void Main(string[] args)
-
  {
-
#if DEBUG
-
    Console.WriteLine("Debugビルドです");
-
#else
-
    Console.WriteLine("Releaseビルドです");
-
#endif
-
  }
-
}
-
}}
-
このようなソースを含むプロジェクトファイルについて、「/p:Configuration=Release」を指定すると次のような実行結果となる。
-
#prompt{{
-
E:\msbuild>msbuild Sample.csproj /t:Clean;Build;Run /p:Configuration=Release
-
    . 
-
    :
-
(途中省略)
-
    :
-
    . 
-
ターゲット CoreCompile:
-
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701
-
,1702 /errorreport:prompt /warn:4 /define:TRACE /reference:C:\Windows\Microsoft.
-
NET\Framework\v2.0.50727\System.dll /debug:pdbonly /optimize+ /out:obj\Release\S
-
ample.exe /target:exe Sample.cs
-
    . 
-
    :
-
(途中省略)
-
    :
-
    . 
-
ターゲット Run:
-
    E:\msbuild\bin\Release\Sample.exe
-
    Releaseビルドです
 

        

        
-
ビルドに成功しました。
-
    0 警告
-
    0 エラー
 

        

        
-
経過時間 00:00:00.36
-
}}
 

        

        
-
デフォルトではConfigurationの値はDebugとなっているので、「/p:Configuration=Debug」と明示的に指定しなくてもDebug構成でのビルドが行われる。
 

        

        
-
**コンパイルスイッチを指定してプロジェクトファイルをビルドする
-
ビルド構成の場合と同様に、/property(または/p)でDefineConstantsプロパティを指定することで、コンパイルスイッチを指定することも出来る。 たとえば、
-
#code(cs){{
-
using System;
 

        

        
-
class Program
-
{
-
  static void Main(string[] args)
-
  {
-
#if DEBUG
-
    Console.WriteLine("DEBUGは有効です");
-
#endif
 

        

        
-
#if PLATFORM_WIN32
-
    Console.WriteLine("PLATFORM_WIN32は有効です");
-
#endif
 

        

        
-
#if PLATFORM_WINNT
-
    Console.WriteLine("PLATFORM_WINNTは有効です");
-
#endif
-
  }
-
}
-
}}
 

        

        
-
このようなソースを含むプロジェクトファイルについて、プロパティに「/p:DefineConstants="DEBUG;PLATFORM_WIN32"」を指定すると次のような実行結果となる。
-
#prompt{{
-
E:\msbuild>msbuild Sample.csproj /t:Clean;Build;Run /p:DefineConstants="DEBUG;PLATFORM_WIN32"
-
    . 
-
    :
-
(途中省略)
-
    :
-
    . 
-
ターゲット CoreCompile:
-
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701
-
,1702 /errorreport:prompt /warn:4 /define:DEBUG;PLATFORM_WIN32 /reference:C:\Win
-
dows\Microsoft.NET\Framework\v2.0.50727\System.dll /debug+ /debug:full /optimize
-
- /out:obj\Debug\Sample.exe /target:exe Sample.cs
-
    . 
-
    :
-
(途中省略)
-
    :
-
    . 
-
ターゲット Run:
-
    E:\msbuild\bin\Debug\Sample.exe
-
    DEBUGは有効です
-
    PLATFORM_WIN32は有効です
 

        

        
-
ビルドに成功しました。
-
    0 警告
-
    0 エラー
 

        

        
-
経過時間 00:00:00.38
-
}}