チュートリアル: インライン タスクの作成Walkthrough: Creating an Inline Task

MSBuild タスクは通常、ITask インターフェイスを実装するクラスをコンパイルして作成します。MSBuild tasks are typically created by compiling a class that implements the ITask interface. .NET Framework Version 4 以降では、プロジェクト ファイルでタスクをインラインで作成できます。Starting with the .NET Framework version 4, you can create tasks inline in the project file. 個別のアセンブリを作成してタスクをホストする必要はありません。You do not have to create a separate assembly to host the task. 詳細については、「インライン タスク」を参照してください。For more information, see Inline Tasks.

このチュートリアルでは、次のインライン タスクを作成し、実行する方法について説明します。This walkthrough shows how to create and run these inline tasks:

  • 入力パラメーターも出力パラメーターも持たないタスク。A task that has no input or output parameters.

  • 1 つの入力パラメーターを持つが出力パラメーターを持たないタスク。A task that has one input parameter and no output parameters.

  • 2 つの入力パラメーターと、MSBuild プロパティを返す 1 つの出力パラメーターを持つタスク。A task that has two input parameters, and one output parameter that returns an MSBuild property.

  • 2 つの入力パラメーターと、MSBuild 項目を返す 1 つの出力パラメーターを持つタスク。A task that has two input parameters, and one output parameter that returns an MSBuild item.

    タスクを作成して実行するには、Visual Studio と Visual Studio コマンド プロンプト ウィンドウを使用して次の操作を実行します。To create and run the tasks, use Visual Studio and the Visual Studio Command Prompt Window, as follows:

  • Visual Studio を使用して MSBuild プロジェクト ファイルを作成します。Create an MSBuild project file by using Visual Studio.

  • Visual Studio でプロジェクト ファイルを変更してインライン タスクを作成します。Modify the project file in Visual Studio to create the inline task.

  • コマンド プロンプト ウィンドウを使用してプロジェクトをビルドし、結果を確認します。Use the Command Prompt Window to build the project and examine the results.

MSBuild プロジェクトの作成と変更Creating and Modifying an MSBuild Project

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

プロジェクト ファイルを作成および変更するにはTo create and modify a project file

  1. Visual Studio で、[ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。In Visual Studio, on the File menu, click New and then click Project.

  2. [新しいプロジェクト] ダイアログ ボックスで、プロジェクトの種類として Visual C# を選択し、[Windows フォーム アプリケーション] テンプレートをクリックします。In the New Project dialog box, select the Visual C# project type, and then select the Windows Forms Application template. [名前] ボックスに「InlineTasks」と入力します。In the Name box, type InlineTasks. ソリューションの場所を入力します (D:\ など)。Type a Location for the solution, for example, D:\. [ソリューションのディレクトリを作成] がオンになっていることと、[ソース管理に追加] がオフになっていること、さらに [ソリューション名]InlineTasks になっていることを確認します。Ensure that Create directory for solution is selected, Add to Source Control is cleared, and Solution Name is InlineTasks.

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

  3. ソリューション エクスプローラーで、[InlineTasks] プロジェクト ノードを右クリックし、[プロジェクトのアンロード] をクリックします。In Solution Explorer, right-click the InlineTasks project node, and then click Unload Project.

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

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

基本的な Hello タスクの追加Adding a Basic Hello Task

ここでは、"Hello, world!" というメッセージを表示する基本的なタスクをプロジェクト ファイルに追加します。Now, add to the project file a basic task that displays the message "Hello, world!" また、タスクを呼び出す既定の TestBuild ターゲットを追加します。Also add a default TestBuild target to invoke the task.

基本的な Hello タスクを追加するにはTo add a basic hello task

  1. ルートの Project ノードで、DefaultTargets 属性を TestBuild に変更します。その結果、Project ノードは次の例のようになります。In the root Project node, change the DefaultTargets attribute to TestBuild.The resulting Project node should resemble this example:

    <Project ToolsVersion="4.0" DefaultTargets="TestBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  2. プロジェクト ファイルの </Project> タグの直前に、次のインライン タスクとターゲットを追加します。Add the following inline task and target to the project file just before the </Project> tag.

    <UsingTask TaskName="Hello" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >  
      <ParameterGroup />  
      <Task>  
        <Code Type="Fragment" Language="cs">  
          Log.LogMessage("Hello, world!", MessageImportance.High);  
        </Code>  
      </Task>  
    </UsingTask>  
    <Target Name="TestBuild">  
      <Hello />  
    </Target>  
    
  3. プロジェクト ファイルを保存します。Save the project file.

    このコードによって、パラメーター、参照、Using ステートメントがない Hello という名前のインライン タスクが作成されます。This code creates an inline task that is named Hello and has no parameters, references, or Using statements. この Hello タスクには、既定のログ デバイス (通常はコンソール ウィンドウ) に Hello メッセージを表示する 1 行のコードのみが含まれています。The Hello task contains just one line of code, which displays a hello message on the default logging device, typically the console window.

Hello タスクの実行Running the Hello Task

コマンド プロンプト ウィンドウを使用して MSBuild を実行し、Hello タスクを構築して、そのタスクを呼び出す TestBuild ターゲットを処理します。Run MSBuild by using the Command Prompt Window to construct the Hello task and to process the TestBuild target that invokes it.

Hello タスクを実行するにはTo run the Hello task
  1. [スタート][すべてのプログラム] の順にクリックし、[Visual Studio Tools] フォルダーを見つけて [Visual Studio コマンド プロンプト] をクリックします。Click Start, click All Programs, and then locate the Visual Studio Tools folder and click Visual Studio Command Prompt.

  2. コマンド プロンプト ウィンドウで、プロジェクト ファイルが格納されているフォルダー (この場合は D:\InlineTasks\InlineTasks\) を見つけます。In the Command Prompt Window, locate the folder that contains the project file, in this case, D:\InlineTasks\InlineTasks\.

  3. コマンド スイッチを指定せずに「msbuild」と入力し、Enter キーを押します。Type msbuild without command switches, and then press ENTER. 既定では、これによって InlineTasks.csproj ファイルがビルドされ、Hello タスクを呼び出す既定のターゲット TestBuild が処理されます。By default, this builds the InlineTasks.csproj file and processes the default target TestBuild, which invokes the Hello task.

  4. コマンド プロンプト ウィンドウで出力を確認します。Examine the output in the Command Prompt Window. 次の行が表示されます。You should see this line:

    Hello, world!

    注意

    Hello メッセージが表示されない場合は、プロジェクト ファイルをもう一度保存してから Hello タスクを実行してみてください。If you do not see the hello message, try saving the project file again and then run the Hello task.

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

Echo タスクの定義Defining the Echo Task

文字列パラメーターを受け取って既定のログ デバイスに文字列を表示するインライン タスクを作成します。Create an inline task that accepts a string parameter and displays the string on the default logging device.

Echo タスクを定義するにはTo define the Echo task

  1. コード エディターで、次のコードを使用して、Hello タスクと TestBuild ターゲットを置き換えます。In the code editor, replace the Hello task and TestBuild target by using the following code.

    <UsingTask TaskName="Echo" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >  
      <ParameterGroup>  
        <Text Required="true" />  
      </ParameterGroup>  
      <Task>  
        <Code Type="Fragment" Language="cs">  
          Log.LogMessage(Text, MessageImportance.High);  
        </Code>  
      </Task>  
    </UsingTask>  
    <Target Name="TestBuild">  
      <Echo Text="Greetings!" />  
    </Target>  
    
  2. コマンド プロンプト ウィンドウで、コマンド スイッチを指定せずに「msbuild」と入力し、Enter キーを押します。In the Command Prompt Window, type msbuild without command switches, and then press ENTER. 既定では、これによって Echo タスクを呼び出す既定のターゲット TestBuild が処理されます。By default, this processes the default target TestBuild, which invokes the Echo task.

  3. コマンド プロンプト ウィンドウで出力を確認します。Examine the output in the Command Prompt Window. 次の行が表示されます。You should see this line:

    Greetings!

    このコードによって、必須の入力パラメーター Text を 1 つだけ持つ Echo という名前のインライン タスクが定義されます。This code defines an inline task that is named Echo and has just one required input parameter Text. 既定では、パラメーターの型は System.String です。By default, parameters are of type System.String. Text パラメーターの値は、TestBuild ターゲットによって Echo タスクが呼び出されたときに設定されます。The value of the Text parameter is set when the TestBuild target invokes the Echo task.

Adder タスクの定義Defining the Adder Task

2 つの整数パラメーターを追加して、その合計を MSBuild プロパティとして生成するインライン タスクを作成します。Create an inline task that adds two integer parameters and emits their sum as an MSBuild property.

Adder タスクを定義するにはTo define the Adder task

  1. コード エディターで、次のコードを使用して、Echo タスクと TestBuild ターゲットを置き換えます。In the code editor, replace the Echo task and TestBuild target by using the following code.

    <UsingTask TaskName="Adder" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >  
      <ParameterGroup>  
        <A ParameterType="System.Int32" Required="true" />  
        <B ParameterType="System.Int32" Required="true" />  
        <C ParameterType="System.Int32" Output="true" />  
      </ParameterGroup>  
      <Task>  
        <Code Type="Fragment" Language="cs">  
          C = A + B;  
        </Code>  
      </Task>  
    </UsingTask>    
    <Target Name="TestBuild">  
      <Adder A="4" B="5">  
        <Output PropertyName="Sum" TaskParameter="C" />  
      </Adder>  
      <Message Text="The sum is $(Sum)" Importance="High" />  
    </Target>  
    
  2. コマンド プロンプト ウィンドウで、コマンド スイッチを指定せずに「msbuild」と入力し、Enter キーを押します。In the Command Prompt Window, type msbuild without command switches, and then press ENTER. 既定では、これによって Echo タスクを呼び出す既定のターゲット TestBuild が処理されます。By default, this processes the default target TestBuild, which invokes the Echo task.

  3. コマンド プロンプト ウィンドウで出力を確認します。Examine the output in the Command Prompt Window. 次の行が表示されます。You should see this line:

    The sum is 9

    このコードによって、Adder という名前のインライン タスクが定義されます。このタスクには、2 つの必須の整数入力パラメーター A と B、および 1 つの整数出力パラメーター C があります。Adder タスクによって 2 つの入力パラメーターが追加され、出力パラメーターで合計が返されます。This code defines an inline task that is named Adder and has two required integer input parameters, A and B, and one integer output parameter, C. The Adder task adds the two input parameters and returns the sum in the output parameter. 合計は MSBuild プロパティ Sum として生成されます。The sum is emitted as the MSBuild property Sum. 入力パラメーターの値は、TestBuild ターゲットによって Adder タスクが呼び出されたときに設定されます。The values of the input parameters are set when the TestBuild target invokes the Adder task.

RegX タスクの定義Defining the RegX Task

項目グループおよび正規表現を受け取って、正規表現と一致するファイルの内容を含むすべての項目の一覧を返すインライン タスクを作成します。Create an inline task that accepts an item group and a regular expression, and returns a list of all items that have file content that matches the expression.

RegX タスクを定義するにはTo define the RegX task

  1. コード エディターで、次のコードを使用して、Adder タスクと TestBuild ターゲットを置き換えます。In the code editor, replace the Adder task and TestBuild target by using the following code.

    <UsingTask TaskName="RegX" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >  
      <ParameterGroup>  
        <Expression Required="true" />  
        <Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />  
        <Result ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />  
      </ParameterGroup>  
      <Task>  
        <Using Namespace="System.Text.RegularExpressions"/>  
        <Code Type="Fragment" Language="cs">  
    <![CDATA[  
          if (Files.Length > 0)  
          {  
            Result = new TaskItem[Files.Length];  
            for (int i = 0; i < Files.Length; i++)  
            {  
              ITaskItem item = Files[i];  
              string path = item.GetMetadata("FullPath");  
              using(StreamReader rdr = File.OpenText(path))  
              {  
                if (Regex.Match(rdr.ReadToEnd(), Expression).Success)  
                {  
                  Result[i] = new TaskItem(item.ItemSpec);  
                }  
              }  
            }  
          }  
    ]]>  
        </Code>  
      </Task>  
    </UsingTask>    
    <Target Name="TestBuild">  
      <RegX Expression="public|protected" Files="@(Compile)">  
        <Output ItemName="MatchedFiles" TaskParameter="Result" />  
      </RegX>  
      <Message Text="Input files: @(Compile)" Importance="High" />  
      <Message Text="Matched files: @(MatchedFiles)" Importance="High" />  
    </Target>  
    
  2. コマンド プロンプト ウィンドウで、コマンド スイッチを指定せずに「msbuild」と入力し、Enter キーを押します。In the Command Prompt Window, type msbuild without command switches, and then press ENTER. 既定では、これによって RegX タスクを呼び出す既定のターゲット TestBuild が処理されます。By default, this processes the default target TestBuild, which invokes the RegX task.

  3. コマンド プロンプト ウィンドウで出力を確認します。Examine the output in the Command Prompt Window. 次の行が表示されます。You should see these lines:

    Input files: Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs

    Matched files: Form1.cs;Form1.Designer.cs;Properties\Settings.Designer.cs

    このコードによって、次の 3 つのパラメーターを持つ RegX という名前のインライン タスクが定義されます。This code defines an inline task that is named RegX and has these three parameters:

  • Expression: 照合する正規表現を示す値を持つ必須の文字列入力パラメーター。Expression is a required string input parameter that has a value that is the regular expression to be matched. この例では、正規表現は "public" または "protected" という語と一致します。In this example, the expression matches the words "public" or "protected".

  • Files: 一致する語を検索するファイルの一覧を示す値を持つ必須の項目一覧入力パラメーター。Files is a required item list input parameter that has a value that is a list of files to be searched for the match. この例では、Files はプロジェクト ソース ファイルを一覧表示する Compile 項目に設定されます。In this example, Files is set to the Compile item, which lists the project source files.

  • Result: 正規表現と一致する内容を含むファイルの一覧を示す値を持つ出力パラメーター。Result is an output parameter that has a value that is is the list of files that have contents that match the regular expression.

    入力パラメーターの値は、TestBuild ターゲットによって RegX タスクが呼び出されたときに設定されます。The value of the input parameters are set when the TestBuild target invokes the RegX task. RegX タスクによってすべてのファイルが読み取られ、正規表現と一致するファイルの一覧が返されます。The RegX task reads every file and returns the list of files that match the regular expression. この一覧は Result 出力パラメーターとして返され、MSBuild 項目 MatchedFiles として生成されます。This list is returned as the Result output parameter, which is emitted as the MSBuild item MatchedFiles.

予約文字の処理Handling Reserved Characters

MSBuild パーサーによってインライン タスクが XML として処理されます。The MSBuild parser processes inline tasks as XML. XML で意味が予約されている文字 ("<" や ">" など) は、.NET ソース コードではなく XML として検出されて処理されます。Characters that have reserved meaning in XML, for example, "<" and ">", are detected and handled as if they were XML, and not .NET source code. コード式に予約文字を含めるには (Files.Length > 0 など)、次のように Code 要素を記述して、その内容が CDATA 式に含まれるようにします。To include the reserved characters in code expressions such as Files.Length > 0, write the Code element so that its contents are contained in a CDATA expression, as follows:

<Code Type="Fragment" Language="cs">

<![CDATA[

// Your code goes here.

]]>

</Code>

関連項目See Also

インライン タスク Inline Tasks
タスク Tasks
ターゲットTargets