チュートリアル: MSBuild の使用Walkthrough: Using MSBuild

MSBuild は Microsoft および Visual Studio のビルド プラットフォームです。MSBuild is the build platform for Microsoft and Visual Studio. このチュートリアルでは、MSBuild のビルド ブロックについて説明し、MSBuild プロジェクトを記述、操作、およびデバッグする方法について説明します。This walkthrough introduces you to the building blocks of MSBuild and shows you how to write, manipulate, and debug MSBuild projects. ここで学習する内容を以下に示します。You will learn about:

  • プロジェクト ファイルの作成と操作Creating and manipulating a project file.

  • ビルド プロパティの使用方法How to use build properties

  • ビルド項目の使用方法How to use build items.

    MSBuild は、Visual Studio から実行することも、コマンド ウィンドウから実行することもできます。You can run MSBuild from Visual Studio, or from the Command Window. このチュートリアルでは、Visual Studio を使用して MSBuild プロジェクト ファイルを作成し、In this walkthrough, you create an MSBuild project file using Visual Studio. そのプロジェクト ファイルを Visual Studio で編集した後、コマンド ウィンドウを使用してプロジェクトをビルドして、結果を確認します。You edit the project file in Visual Studio, and use a Command Window to build the project and examine the results.

MSBuild プロジェクトの作成Creating an MSBuild Project

Visual Studio プロジェクト システムは MSBuild に基づいています。The Visual Studio project system is based on MSBuild. そのため、Visual Studio を使用して新しいプロジェクト ファイルを作成するのは簡単です。This makes it easy to create a new project file using Visual Studio. このセクションでは、Visual C# プロジェクト ファイルを作成します。In this section, you create a Visual C# project file. 代わりに、Visual Basic プロジェクト ファイルを作成することもできます。You can choose to create a Visual Basic project file instead. このチュートリアルのコンテキストでは、2 つのプロジェクト ファイルにはわずかな違いしかありません。In the context of this walkthrough, the difference between the two project files is minor.

プロジェクト ファイルを作成するにはTo create a project file

  1. Visual Studio を開きます。Open Visual Studio.

  2. [ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。On the File menu, point to New, and then click Project.

  3. [新しいプロジェクト] ダイアログ ボックスで、プロジェクトの種類として Visual C# を選択し、[Windows フォーム アプリケーション] テンプレートをクリックします。In the New Project dialog box, select the Visual C# project type, and then select the Windows Forms Application template. [名前] ボックスに「BuildApp」と入力します。In the Name box, type BuildApp. [場所] ボックスにソリューションの場所を入力します (「D:\」など)。Enter a Location for the solution, for example, D:\. それ以外は、既定値をそのまま使用します ([ソリューションのディレクトリを作成] はオン、[ソース管理に追加] はオフ、[ソリューション名]BuildApp)。Accept the defaults for Create directory for solution (selected), Add to Source Control (not selected), and Solution Name (BuildApp).

    [OK] をクリックして、プロジェクト ファイルを作成します。Click OK to create the project file.

プロジェクト ファイルの確認Examining the Project File

前のセクションでは、Visual Studio を使用して Visual C# プロジェクト ファイルを作成しました。In the previous section, you used Visual Studio to create a Visual C# project file. このプロジェクト ファイルは、BuildApp という名前のプロジェクト ノードとしてソリューション エクスプローラーに表示されます。The project file is represented in Solution Explorer by the project node named BuildApp. Visual Studio Code エディターを使用してこのプロジェクト ファイルを確認できます。You can use the Visual Studio code editor to examine the project file.

プロジェクト ファイルを確認するにはTo examine the project file

  1. ソリューション エクスプローラーで、BuildApp というプロジェクト ノードをクリックします。In Solution Explorer, click the project node BuildApp.

  2. プロパティ ブラウザーで、"プロジェクト ファイル" プロパティが "BuildApp.csproj" になっていることを確認します。In the Properties browser, notice that the Project File property is BuildApp.csproj. プロジェクト ファイルはすべて、名前に "proj" というサフィックスが付いています。All project files are named with the suffix "proj". Visual Basic プロジェクトを作成した場合は、プロジェクト ファイルの名前が "BuildApp.vbproj" になります。If you had created a Visual Basic project, the project file name would be BuildApp.vbproj.

  3. プロジェクト ノードを右クリックし、[プロジェクトのアンロード] をクリックします。Right-click the project node, then click Unload Project.

  4. プロジェクト ノードを再度右クリックし、[BuildApp.csproj の編集] をクリックします。Right-click the project node again, then click Edit BuildApp.csproj.

    コード エディターにプロジェクト ファイルが表示されます。The project file appears in the code editor.

ターゲットとタスクTargets and Tasks

プロジェクト ファイルは XML 形式のファイルで、ルート ノードは Project です。Project files are XML-formatted files with the root node Project.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Project 要素で xmlns 名前空間を指定する必要があります。You must specify the xmlns namespace in the Project element. ToolsVersion が新しいプロジェクトに存在する場合は、"15.0" でなければなりません。If ToolsVersion is present in a new project, it must be "15.0".

アプリケーションをビルドする作業は、Target 要素と Task 要素を使用して行われます。The work of building an application is done with Target and Task elements.

  • タスクとは、作業の最小単位であり、ビルドの "原子" のようなものです。A task is the smallest unit of work, in other words, the "atom" of a build. タスクは独立した実行可能コンポーネントで、入力と出力を持つ場合もあります。Tasks are independent executable components which may have inputs and outputs. 現在このプロジェクト ファイルで参照または定義されているタスクはありません。There are no tasks currently referenced or defined in the project file. 後ほど、このプロジェクト ファイルにタスクを追加します。You add tasks to the project file in the sections below. 詳細については、「MSBuild タスク」をご覧ください。For more information, see the Tasks topic.

  • ターゲットとは、一連のタスクに名前を付けたものです。A target is a named sequence of tasks. 詳細については、「MSBuild ターゲット」をご覧ください。For more information, see the Targets topic.

既定のターゲットは、このプロジェクト ファイルでは定義されていません。The default target is not defined in the project file. 代わりに、インポートされるプロジェクトで指定されています。Instead, it is specified in imported projects. Import 要素は、インポートされたプロジェクトを指定します。The Import element specifies imported projects. たとえば、C# プロジェクトでは、既定のターゲットが Microsoft.CSharp.targets ファイルからインポートされます。For example, in a C# project, the default target is imported from the file Microsoft.CSharp.targets.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

インポートされたファイルは、実質的には、プロジェクト ファイルで参照されている場所に挿入されます。Imported files are effectively inserted into the project file wherever they are referenced.

注意

.NET Core などの一部のプロジェクトの種類では、ToolsVersion の代わりに Sdk を使う簡素化されたスキーマが使われます。Some project types, such as .NET Core, use a simplified schema with an Sdk attribute instead of ToolsVersion. これらのプロジェクトには、暗黙的なインポートと、異なる既定の属性値があります。These projects have implicit imports and different default attribute values.

MSBuild ではビルドのターゲットが追跡されるため、個々のターゲットが複数回ビルドされることはありません。MSBuild keeps track of the targets of a build, and guarantees that each target is built no more than once.

ターゲットとタスクの追加Adding a Target and a Task

プロジェクト ファイルにターゲットを追加し、Add a target to the project file. そのターゲットに、メッセージを出力するタスクを追加します。Add a task to the target that prints out a message.

ターゲットとタスクを追加するにはTo add a target and a task

  1. プロジェクト ファイルの Import ステートメントの直後に以下の行を追加します。Add these lines to the project file, just after the Import statement:

    <Target Name="HelloWorld">
    </Target>
    

    これにより、HelloWorld というターゲットが作成されます。This creates a target named HelloWorld. プロジェクト ファイルの編集時には IntelliSense がサポートされます。Notice that you have IntelliSense support while editing the project file.

  2. セクションが次のようになるように、HelloWorld ターゲットに行を追加します。Add lines to the HelloWorld target, so that the resulting section looks like this:

    <Target Name="HelloWorld">
      <Message Text="Hello"></Message>  <Message Text="World"></Message>
    </Target>
    
  3. プロジェクト ファイルを保存します。Save the project file.

    Message タスクは、MSBuild に含まれている数多くのタスクの 1 つです。The Message task is one of the many tasks that ships with MSBuild. 使用可能なすべてのタスクと使用法については、「タスク リファレンス」をご覧ください。For a complete list of available tasks and usage information, see Task Reference.

    Message タスクは、Text 属性の文字列値を入力として受け取り、それを出力デバイスに表示します。The Message task takes the string value of the Text attribute as input and displays it on the output device. HelloWorld ターゲットでは、Message タスクが 2 回実行されます。1 回目の実行で "Hello" と表示され、2 回目の実行で "World" と表示されます。The HelloWorld target executes the Message task twice: first to display "Hello", and then to display "World".

ターゲットのビルドBuilding the Target

Visual Studio コマンド プロンプトから MSBuild を実行して、上で定義した HelloWorld ターゲットをビルドします。Run MSBuild from the Visual Studio Command Prompt to build the HelloWorld target defined above. ターゲットを選択するには、コマンド ライン スイッチの /target または /t を使用します。Use the /target or /t command line switch to select the target.

注意

以降では、Visual Studio コマンド プロンプトコマンド ウィンドウと呼びます。We will refer to the Visual Studio Command Prompt as the Command Window in the sections below.

ターゲットをビルドするにはTo build the target

  1. [スタート] ボタンをクリックし、[すべてのプログラム] をクリックします。Click Start, then click All Programs. [Visual Studio Tools] フォルダーで [Visual Studio コマンド プロンプト] をクリックします。Locate and click the Visual Studio Command Prompt in the Visual Studio Tools folder.

  2. コマンド ウィンドウで、プロジェクト ファイルを含むフォルダー (この場合は D:\BuildApp\BuildApp) に移動します。From the command window, navigate to the folder containing the project file, in this case, D:\BuildApp\BuildApp.

  3. コマンド ライン スイッチ /t:HelloWorld を使用して msbuild を実行します。Run msbuild with the command switch /t:HelloWorld. HelloWorld ターゲットが選択されてビルドされます。This selects and builds the HelloWorld target:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. コマンド ウィンドウで出力を確認します。Examine the output in the Command window. "Hello" と "World" の 2 つの行が表示されます。You should see the two lines "Hello" and "World":

    Hello
    World
    

注意

"The target "HelloWorld" does not exist in the project" と表示される場合は、コード エディターでプロジェクト ファイルが保存されていない可能性があります。If instead you see The target "HelloWorld" does not exist in the project then you probably forgot to save the project file in the code editor. ファイルを保存して、やり直してください。Save the file and try again.

コード エディターとコマンド ウィンドウを交互に使用すると、プロジェクト ファイルを変更してすばやく結果を確認できます。By alternating between the code editor and the command window, you can change the project file and quickly see the results.

[ビルド プロパティ]Build Properties

ビルド プロパティは、ビルドを制御する名前と値のペアです。Build properties are name-value pairs that guide the build. このプロジェクト ファイルの先頭には、既にいくつかのビルド プロパティが定義されています。Several build properties are already defined at the top of the project file:

<PropertyGroup>
...
  <ProductVersion>10.0.11107</ProductVersion>
  <SchemaVersion>2.0</SchemaVersion>
  <ProjectGuid>{30E3C9D5-FD86-4691-A331-80EA5BA7E571}</ProjectGuid>
  <OutputType>WinExe</OutputType>
...
</PropertyGroup>

すべてのプロパティは、PropertyGroup 要素の子要素です。All properties are child elements of PropertyGroup elements. 子要素の名前がプロパティの名前になり、子要素のテキスト要素がプロパティの値になります。The name of the property is the name of the child element, and the value of the property is the text element of the child element. たとえば、オブジェクトに適用されたFor example,

<TargetFrameworkVersion>v15.0</TargetFrameworkVersion>

ここでは、TargetFrameworkVersion という名前のプロパティを定義して、文字列値 "v15.0" を割り当てています。defines the property named TargetFrameworkVersion, giving it the string value "v15.0".

ビルド プロパティはいつでも再定義できます。Build properties may be redefined at any time. IfIf

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

上の行が、プロジェクト ファイルの後半に含まれていたり、プロジェクト ファイルの後半でインポートされるファイルに含まれていたりした場合は、TargetFrameworkVersion に "v3.5" という新しい値が割り当てられます。appears later in the project file, or in a file imported later in the project file, then TargetFrameworkVersion takes the new value "v3.5".

プロパティ値の確認Examining a Property Value

プロパティの値を取得するには、次の構文を使用します。ここで、PropertyName はプロパティの名前です。To get the value of a property, use the following syntax, where PropertyName is the name of the property:

$(PropertyName)

この構文を使用して、プロジェクト ファイルのいくつかのプロパティを確認します。Use this syntax to examine some of the properties in the project file.

プロパティ値を確認するにはTo examine a property value

  1. コード エディターで、HelloWorld ターゲットを次のコードに置き換えます。From the code editor, replace the HelloWorld target with this code:

    <Target Name="HelloWorld">
      <Message Text="Configuration is $(Configuration)" />
      <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" />
    </Target>
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の 2 つの行が表示されます (.NET Framework のバージョンが異なる場合もあります)。You should see these two lines (your .NET Framework version may differ):

    Configuration is Debug
    MSBuildToolsPath is C:\Program Files (x86)\Microsoft Visual Studio\2017\<Visual Studio SKU>\MSBuild\15.0\Bin
    

注意

これらの行が表示されない場合は、コード エディターでプロジェクト ファイルが保存されていない可能性があります。If you don't see these lines then you probably forgot to save the project file in the code editor. ファイルを保存して、やり直してください。Save the file and try again.

条件付きプロパティConditional Properties

Configuration など、多くのプロパティは、Condition 属性を使用して条件付きで定義されます。Many properties like Configuration are defined conditionally, that is, the Condition attribute appears in the property element. 条件付きプロパティは、条件が "true" と評価された場合にのみ定義 (または再定義) されます。Conditional properties are defined or redefined only if the condition evaluates to "true". 未定義のプロパティには、既定値として空の文字列が割り当てられます。Note that undefined properties are given the default value of an empty string. たとえば、オブジェクトに適用されたFor example,

<Configuration   Condition=" '$(Configuration)' == '' ">Debug</Configuration>

これは、"Configuration プロパティが定義されていない場合に、それを定義して値を 'Debug' に設定する" という意味になります。means "If the Configuration property has not been defined yet, define it and give it the value 'Debug'".

Condition 属性は MSBuild のほぼすべての要素に設定できます。Almost all MSBuild elements can have a Condition attribute. Condition 属性の使用の詳細については、「MSBuild Conditions (MSBuild の条件)」をご覧ください。For more discussion about using the Condition attribute, see Conditions.

予約済みのプロパティReserved Properties

MSBuild では、プロジェクト ファイルに関する情報や MSBuild のバイナリに関する情報を保持するために、いくつかのプロパティ名が予約されています。MSBuild reserves some property names to store information about the project file and the MSBuild binaries. たとえば、MSBuildToolsPath も予約済みのプロパティの 1 つです。MSBuildToolsPath is an example of a reserved property. 予約済みのプロパティは、他のプロパティと同じように $ 表記で参照できます。Reserved properties are referenced with the $ notation like any other property. 詳細については、「方法 : プロジェクト ファイルの名前または場所を参照する」および「MSBuild の予約済みおよび既知のプロパティ」をご覧ください。For more information, see How to: Reference the Name or Location of the Project File and MSBuild Reserved and Well-Known Properties.

環境変数Environment Variables

プロジェクト ファイルで環境変数を参照する場合も、ビルド プロパティを参照するときと同じ方法を使用します。You can reference environment variables in project files the same way as build properties. たとえば、プロジェクト ファイルで PATH 環境変数を使用するには、$(Path) と記述します。For example, to use the PATH environment variable in your project file, use $(Path). プロジェクト ファイルに、環境変数と同じ名前のプロパティが定義されている場合、環境変数の値はプロジェクト内のプロパティによってオーバーライドされます。If the project contains a property definition that has the same name as an environment variable, the property in the project overrides the value of the environment variable. 環境変数の使用方法の詳細については、「方法 : ビルドで環境変数を使用する」をご覧ください。For more information, see How to: Use Environment Variables in a Build.

コマンドラインからのプロパティの設定Setting Properties from the Command Line

プロパティは、コマンド ライン スイッチの /property または /p を使用してコマンド ラインで定義することもできます。Properties may be defined on the command line using the /property or /p command line switch. プロジェクト ファイルに設定されたプロパティ値や環境変数として設定されたプロパティ値は、コマンド ラインから渡されたプロパティ値によってオーバーライドされます。Property values received from the command line override property values set in the project file and environment variables.

コマンド ラインからプロパティ値を設定するにはTo set a property value from the command line

  1. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld /p:Configuration=Release
    
  2. 出力を調べます。Examine the output. 次の行が表示されます。You should see this line:

    Configuration is Release.
    

    Configuration プロパティが作成されて、値が "Release" に設定されます。MSBuild creates the Configuration property and gives it the value "Release".

特殊文字Special Characters

MSBuild プロジェクト ファイルでは、特定の文字が特殊な意味を持ちます。Certain characters have special meaning in MSBuild project files. そのような文字の例として、セミコロン (;) およびアスタリスク (*) があります。Examples of these characters include semicolons (;) and asterisks (*). これらの特殊文字をプロジェクト ファイル内でリテラルとして使用するには、構文 %xx でそれらの文字を指定する必要があります。xx は文字の ASCII 16 進値を表します。In order to use these special characters as literals in a project file, they must be specified by using the syntax %xx, where xx represents the ASCII hexadecimal value of the character.

Message タスクに変更を加えて、特殊文字を使用して Configuration プロパティの値を読みやすくします。Change the Message task to show the value of the Configuration property with special characters to make it more readable.

Message タスクで特殊文字を使用するにはTo use special characters in the Message task

  1. コード エディターで、両方の Message タスクを次の行に置き換えます。From the code editor, replace both Message tasks with this line:

    <Message Text="%24(Configuration) is %22$(Configuration)%22" />
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の行が表示されます。You should see this line:

    $(Configuration) is "Debug"
    

    詳細については、「MSBuild の特殊文字」をご覧ください。For more information, see MSBuild Special Characters.

ビルド項目Build Items

項目とは、ファイル名など、ビルド システムへの入力として使用される情報です。An item is a piece of information, typically a file name, that is used as an input to the build system. たとえば、ソース ファイルを表す項目のコレクションを Compile という名前のタスクに渡して、アセンブリにコンパイルする場合などがあります。For example, a collection of items representing source files might be passed to a task named Compile to compile them into an assembly.

すべての項目は、ItemGroup 要素の子要素です。All items are child elements of ItemGroup elements. 子要素の名前が項目の名前になり、子要素の Include 属性の値が項目の値になります。The item name is the name of the child element, and the item value is the value of the Include attribute of the child element. 同じ名前を持つ項目の値は、その名前の項目の種類に収集されます。The values of items with the same name are collected into item types of that name. たとえば、オブジェクトに適用されたFor example,

<ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

ここでは、2 つの項目を含む項目グループを定義しています。defines an item group containing two items. 項目の種類 Compile には、"Program.cs" と "Properties\AssemblyInfo.cs" の 2 つの値があります。The item type Compile has two values: "Program.cs" and "Properties\AssemblyInfo.cs".

次のコードでは、両方のファイルをセミコロンで区切って 1 つの Include 属性で宣言することで、同じ項目の種類を作成しています。The following code creates the same item type by declaring both files in one Include attribute, separated by a semicolon.

<ItemGroup>
    <Compile Include="Program.cs;Properties\AssemblyInfo.cs" />
</ItemGroup>

詳細については、「MSBuild 項目」をご覧ください。For more information, see Items.

注意

ファイル パスは、MSBuild プロジェクト ファイルを含むフォルダーに対する相対パスです。File paths are relative to the folder containing the MSBuild project file.

項目の種類の値の確認Examining Item Type Values

項目の種類の値を取得するには、次の構文を使用します。ここで、ItemType は項目の種類の名前です。To get the values of an item type, use the following syntax, where ItemType is the name of the item type:

@(ItemType)

この構文を使用して、プロジェクト ファイルの項目の種類 Compile を確認します。Use this syntax to examine the Compile item type in the project file.

項目の種類の値を確認するにはTo examine item type values

  1. コード エディターで、HelloWorld ターゲット タスクを次のコードに置き換えます。From the code editor, replace the HelloWorld target task with this code:

    <Target Name="HelloWorld">
      <Message Text="Compile item type contains @(Compile)" />
    </Target>
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の長い行が表示されます。You should see this long line:

    Compile item type contains Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs
    

    項目の種類の値は、既定ではセミコロンで区切られます。The values of an item type are separated with semicolons by default.

    項目の種類の区切り記号を変更するには、次の構文を使用します。ここで、ItemType は項目の種類、Separator は 1 文字以上の区切り記号です。To change the separator of an item type, use the following syntax, where ItemType is the item type and Separator is a string of one or more separating characters:

@(ItemType, Separator)

Message タスクに変更を加えて、復帰と改行 (%0A%0D) を使用して Compile 項目を 1 行に 1 つずつ表示します。Change the Message task to use carriage returns and line feeds (%0A%0D) to display Compile items one per line.

項目の種類の値を 1 行に 1 つずつ表示するにはTo display item type values one per line

  1. コード エディターで、Message タスクを次の行に置き換えます。From the code editor, replace the Message task with this line:

    <Message Text="Compile item type contains @(Compile, '%0A%0D')" />
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の行が表示されます。You should see these lines:

    Compile item type contains Form1.cs
    Form1.Designer.cs
    Program.cs
    Properties\AssemblyInfo.cs
    Properties\Resources.Designer.cs
    Properties\Settings.Designer.cs
    

Include、Exclude、およびワイルドカードInclude, Exclude, and Wildcards

Include 属性でワイルドカード ("*"、"**"、および "?") を使用して、項目を項目の種類に追加できます。You can use the wildcards "*", "**", and "?" with the Include attribute to add items to an item type. たとえば、オブジェクトに適用されたFor example,

<Photos Include="images\*.jpeg" />

この例では、images フォルダーにある拡張子が ".jpeg" のすべてのファイルが項目の種類 Photos に追加されます。もう 1 つ例を見てましょう。adds all files with the file extension ".jpeg" in the images folder to the Photos item type, while

<Photos Include="images\**.jpeg" />

この例では、images フォルダーとそのすべてのサブフォルダーにある拡張子が ".jpeg" のすべてのファイルが項目の種類 Photos に追加されます。adds all files with the file extension ".jpeg" in the images folder, and all its subfolders, to the Photos item type. 例については、「方法: ビルドするファイルを選択する」をご覧ください。For more examples, see How to: Select the Files to Build.

項目を宣言すると、それらが項目の種類に追加されます。Notice that as items are declared they are added to the item type. たとえば、オブジェクトに適用されたFor example,

<Photos Include="images\*.jpeg" />
<Photos Include="images\*.gif" />

この例では、image フォルダーにある拡張子が ".jpeg" または ".gif" のすべてのファイルを含む項目の種類 Photos が作成されます。creates an item type named Photo containing all files in the image folder with a file extension of either ".jpeg" or ".gif". 次の行も同じ結果をもたらします。This is equivalent to the following line:

<Photos Include="images\*.jpeg;images\*.gif" />

項目の種類から項目を除外するには、Exclude 属性を使用します。You can exclude an item from an item type with the Exclude attribute. たとえば、オブジェクトに適用されたFor example,

<Compile Include="*.cs" Exclude="*Designer*">

この例では、拡張子が ".cs" のすべてのファイルが項目の種類 Compile に追加されますが、名前に文字列 "Designer" が含まれているファイルは除外されます。adds all files with the file extension".cs" to the Compile item type, except for files whose names contain the string "Designer". 例については、「方法: ビルドからファイルを除外する」をご覧ください。For more examples, see How to: Exclude Files from the Build.

Exclude 属性は、同一の項目要素内にある Include 属性によって追加された項目のみに作用します。The Exclude attribute only affects the items added by the Include attribute in the item element that contains them both. たとえば、オブジェクトに適用されたFor example,

<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">

この例では、Form1.cs ファイルは前の項目要素で追加されているため、除外されません。would not exclude the file Form1.cs, which was added in the preceding item element.

項目を追加および除外するにはTo include and exclude items
  1. コード エディターで、Message タスクを次の行に置き換えます。From the code editor, replace the Message task with this line:

    <Message Text="XFiles item type contains @(XFiles)" />
    
  2. Import 要素の直後に次の項目グループを追加します。Add this item group just after the Import element:

    <ItemGroup>
       <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" />
    </ItemGroup>
    
  3. プロジェクト ファイルを保存します。Save the project file.

  4. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  5. 出力を調べます。Examine the output. 次の行が表示されます。You should see this line:

    XFiles item type contains Form1.cs;Program.cs;Properties/Resources.resx
    

アイテム メタデータItem Metadata

項目には、Include および Exclude 属性から収集した情報に加えて、メタデータが含まれます。Items may contain metadata in addition to the information gathered from the Include and Exclude attributes. このメタデータは、項目の値だけでなく項目に関する詳細情報を必要とするタスクで使用できます。This metadata can be used by tasks that require more information about items than just the item value.

アイテム メタデータは、そのメタデータ名を名前に持つ要素を、項目の子として作成することにより、プロジェクト ファイルで宣言します。Item metadata is declared in the project file by creating an element with the name of the metadata as a child element of the item. 項目には 0 以上のメタデータ値を指定できます。An item can have zero or more metadata values. たとえば、次の CSFile 項目には、値 "Fr" の Culture メタデータがあります。For example, the following CSFile item has Culture metadata with a value of "Fr":

<ItemGroup>
    <CSFile Include="main.cs">
        <Culture>Fr</Culture>
    </CSFile>
</ItemGroup>

項目の種類のメタデータ値を取得するには、次の構文を使用します。ここで、ItemType は項目の種類の名前、MetaDataName はメタデータの名前です。To get the metadata value of an item type, use the following syntax, where ItemType is the name of the item type and MetaDataName is the name of the metadata:

%(ItemType.MetaDataName)

項目メタデータを確認するにはTo examine item metadata

  1. コード エディターで、Message タスクを次の行に置き換えます。From the code editor, replace the Message task with this line:

    <Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の行が表示されます。You should see these lines:

    Compile.DependentUpon:
    Compile.DependentUpon: Form1.cs
    Compile.DependentUpon: Resources.resx
    Compile.DependentUpon: Settings.settings
    

    "Compile.DependentUpon" というフレーズが何回か出現しています。Notice how the phrase "Compile.DependentUpon" appears several times. ターゲット内でメタデータを使用する際にこの構文を使用すると、"バッチ処理" が行われます。The use of metadata with this syntax within a target causes "batching". バッチ処理では、ターゲット内のタスクが各メタデータ値について 1 回だけ実行されます。Batching means that the tasks within the target are executed once for each unique metadata value. これは、一般的なプログラミング構造の "for ループ" に相当します。This is the MSBuild script equivalent of the common "for loop" programming construct. 詳細については、「MSBuild バッチ」をご覧ください。For more information, see Batching.

既知のメタデータWell-Known Metadata

項目リストに追加した項目には、既知のメタデータが割り当てられます。Whenever an item is added to an item list, that item is assigned some well-known metadata. たとえば、項目のファイル名を返す %(Filename) などです。For example, %(Filename) returns the file name of any item. すべての既知のメタデータの一覧については、「Well-known Item Metadata (既知の項目メタデータ)」をご覧ください。For a complete list of well-known metadata, see Well-known Item Metadata.

既知のメタデータを確認するにはTo examine well-known metadata
  1. コード エディターで、Message タスクを次の行に置き換えます。From the code editor, replace the Message task with this line:

    <Message Text="Compile Filename: %(Compile.Filename)" />
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の行が表示されます。You should see these lines:

    Compile Filename: Form1
    Compile Filename: Form1.Designer
    Compile Filename: Program
    Compile Filename: AssemblyInfo
    Compile Filename: Resources.Designer
    Compile Filename: Settings.Designer
    

    この例を前の例と比較すると、DependentUpon メタデータは項目の種類 Compile のすべての項目には含まれていないのに対し、既知のメタデータ Filename はすべての項目に含まれていることがわかります。By comparing the two examples above, you can see that while not every item in the Compile item type has DependentUpon metadata, all items have the well-known Filename metadata.

メタデータの変換Metadata Transformations

既存の項目リストを新しい項目リストに変換できます。Item lists can be transformed into new item lists. 項目リストを変換するには、次の構文を使用します。ここで、ItemType は項目の種類の名前、MetadataName はメタデータの名前です。To transform an item list, use the following syntax, where ItemType is the name of the item type and MetadataName is the name of the metadata:

@(ItemType -> '%(MetadataName)')

たとえば、@(SourceFiles -> '%(Filename).obj') のような式を使用すると、ソース ファイルの項目リストをオブジェクト ファイルのコレクションに変換できます。For example, an item list of source files can be transformed into a collection of object files using an expression like @(SourceFiles -> '%(Filename).obj'). 詳細については、「MSBuild 変換」をご覧ください。For more information, see Transforms.

メタデータを使用して項目を変換するにはTo transform items using metadata
  1. コード エディターで、Message タスクを次の行に置き換えます。From the code editor, replace the Message task with this line:

    <Message Text="Backup files: @(Compile->'%(filename).bak')" />
    
  2. プロジェクト ファイルを保存します。Save the project file.

  3. コマンド ウィンドウで、次の行を入力して実行します。From the Command Window, enter and execute this line:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. 出力を調べます。Examine the output. 次の行が表示されます。You should see this line:

    Backup files: Form1.bak;Form1.Designer.bak;Program.bak;AssemblyInfo.bak;Resources.Designer.bak;Settings.Designer.bak
    

    この構文で表されるメタデータではバッチ処理は行われないことに注意してください。Notice that metadata expressed in this syntax does not cause batching.

次の内容What's Next?

簡単なプロジェクト ファイルを 1 ステップずつ作成する方法については、「チュートリアル: MSBuild プロジェクト ファイルのゼロからの作成」をご覧ください。To learn how to create a simple project file one step at a time, try out the Walkthrough: Creating an MSBuild Project File from Scratch.

参照See Also