연습: 인라인 작업 만들기Walkthrough: Creating an Inline Task

MSBuild 작업은 일반적으로 ITask 인터페이스를 구현하는 클래스를 컴파일하여 생성됩니다.MSBuild tasks are typically created by compiling a class that implements the ITask interface. .NET Framework 버전 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를 사용하여 MSBuild 프로젝트 파일을 만들 수 있습니다.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. 이 연습의 컨텍스트에서는 두 프로젝트 파일 간에 별 차이가 없습니다.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 Forms 응용 프로그램 템플릿을 선택합니다.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.

    확인을 클릭하여 프로젝트 파일을 만듭니다.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.

    이 코드는 Hello로 지칭되고 매개 변수, 참조 또는 Using 문이 없는 인라인 작업을 만듭니다.This code creates an inline task that is named Hello and has no parameters, references, or Using statements. Hello 작업에는 기본 로깅 장치(일반적으로 콘솔 창)에 hello 메시지를 표시하는 코드 한 줄만 포함됩니다.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 파일이 빌드되고 기본 대상 TestBuild가 처리됩니다. 그 결과 Hello 작업이 호출됩니다.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. 기본적으로 이 명령은 기본 대상 TestBuild를 처리하며 결과적으로 Echo 작업이 호출됩니다.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!

    이 코드는 Echo라고 지칭하며 필수 입력 매개 변수가 Text 1개 뿐인 인라인 작업을 정의합니다.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

두 개의 정수 매개 변수를 추가하고 합계를 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. 기본적으로 이 명령은 기본 대상 TestBuild를 처리하며 결과적으로 Echo 작업이 호출됩니다.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. 기본적으로 이 명령은 기본 대상 TestBuild를 처리하며 결과적으로 RegX 작업이 호출됩니다.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

    이 코드는 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과 같은 코드 식에 예약된 문자를 포함하려면 다음과 같이 해당 콘텐츠가 CDATA 식에 포함되도록 Code 요소를 씁니다.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