방법: 대상 및 작업 구성How to: Configure Targets and Tasks

선택된 MSBuild 작업은 개발 컴퓨터의 환경에 관계 없이 대상으로 지정된 환경에서 실행되도록 설정할 수 있습니다.Selected MSBuild tasks can be set to run in the environment they target, regardless of the environment of the development computer. 예를 들어 64비트 컴퓨터를 사용하여 32비트 아키텍처를 대상으로 하는 응용 프로그램을 빌드할 경우 선택한 작업은 32비트 프로세스에서 실행됩니다.For example, when you use a 64-bit computer to build an application that targets a 32-bit architecture, selected tasks are run in a 32-bit process.

참고

빌드 작업이 Visual C# 또는 Visual Basic 같은 .NET 언어로 작성되고 네이티브 리소스 또는 도구를 사용하지 않는 경우 조정 없이도 모든 대상 컨텍스트에서 실행됩니다.If a build task is written in a .NET language, such as Visual C# or Visual Basic, and does not use native resources or tools, then it will run in any target context without adaptation.

UsingTask 특성 및 작업 매개 변수UsingTask Attributes and Task Parameters

다음 UsingTask 특성은 특정 빌드 프로세스에서 작업의 모든 작동에 영향을 줍니다.The following UsingTask attributes affect all operations of a task in a particular build process:

  • Runtime 특성(있는 경우)은 CLR(공용 언어 런타임) 버전을 설정하고 CLR2, CLR4, CurrentRuntime 또는 *(임의 런타임) 값 중 하나를 사용할 수 있습니다.The Runtime attribute, if present, sets the common language runtime (CLR) version, and can take any one of these values: CLR2, CLR4, CurrentRuntime, or * (any runtime).

  • Architecture 특성(있는 경우)은 플랫폼 및 비트를 설정하고 x86, x64, CurrentArchitecture 또는 *(임의 아키텍처) 값 중 하나를 사용할 수 있습니다.The Architecture attribute, if present, sets the platform and bitness, and can take any one of these values: x86, x64, CurrentArchitecture, or * (any architecture).

  • TaskFactory 특성은(있는 경우) 작업 인스턴스를 만들고 실행하는 작업 팩터리를 설정하고 값 TaskHostFactory만 사용합니다.The TaskFactory attribute, if present, sets the task factory that creates and runs the task instance, and takes only the value TaskHostFactory. 자세한 내용은 이 문서 뒷부분에 나오는 작업 팩터리 섹션을 참조하세요.For more information, see the Task Factories section later in this document.

<UsingTask TaskName="SimpleTask"   
   Runtime="CLR2"  
   Architecture="x86"  
   AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v3.5.dll" />  

MSBuildRuntimeMSBuildArchitecture 매개 변수를 사용하여 개별 작업의 대상 컨텍스트를 설정할 수도 있습니다.You can also use the MSBuildRuntime and MSBuildArchitecture parameters to set the target context of an individual task.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
   <Target Name="MyTarget">  
      <SimpleTask MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>  
   </Target>  
</Project>  

MSBuild가 작업을 실행하기 전에 동일한 대상 컨텍스트를 갖는 일치하는 UsingTask를 찾습니다.Before MSBuild runs a task, it looks for a matching UsingTask that has the same target context. UsingTask에 지정되어 있으나 해당 작업에는 지정되지 않은 매개 변수는 일치하는 항목으로 간주됩니다.Parameters that are specified in the UsingTask but not in the corresponding task are considered to be matched. 작업에 지정되어 있으나 해당 UsingTask에는 지정되지 않은 매개 변수도 일치하는 항목으로 간주됩니다.Parameters that specified in the task but not in the corresponding UsingTask are also considered to be matched. 매개 변수 값이 UsingTask 및 작업 둘 다에 지정되지 않은 경우 값의 기본값은 *(임의 매개 변수)입니다.If parameter values are not specified in either the UsingTask or the task, the values default to * (any parameter).

경고

둘 이상의 UsingTask가 존재하며 모두 일치하는 TaskName, RuntimeArchitecture 특성을 갖는 경우 마지막으로 평가되는 특성이 다른 특성을 대신합니다.If more than one UsingTask exists and all have matching TaskName, Runtime, and Architecture attributes, the last one to be evaluated replaces the others.

매개 변수가 작업에 설정되어 있으면 MSBuild는 이러한 매개 변수와 일치하거나 적어도 충돌하지 않는 UsingTask를 찾으려고 합니다.If parameters are set on the task, MSBuild attempts to find a UsingTask that matches these parameters or, at least, is not in conflict with them. 둘 이상의 UsingTask는 동일한 작업의 대상 컨텍스트를 지정할 수 있습니다.More than one UsingTask can specify the target context of the same task. 예를 들어, 대상 환경마다 다른 실행 파일을 갖는 작업은 다음과 비슷할 수 있습니다.For example, a task that has different executables for different target environments might resemble this one:

<UsingTask TaskName="MyTool"   
   Runtime="CLR2"  
   Architecture="x86"  
   AssemblyFile="$(MyToolsPath)\MyTool.v2.0.dll" />  

<UsingTask TaskName="MyTool"   
   Runtime="CLR4"  
   Architecture="x86"  
   AssemblyFile="$(MyToolsPath)\MyTool.4.0.dll" />  

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
   <Target Name="MyTarget">  
      <MyTool MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>  
   </Target>  
</Project>  

작업 팩터리Task Factories

작업을 실행하기 전에 MSBuild는 작업이 현재 소프트웨어 컨텍스트에서 실행되도록 지정되어 있는지 여부를 확인합니다.Before it runs a task, MSBuild checks to see whether it is designated to run in the current software context. 작업이 이렇게 지정된 경우 MSBuild는 작업을 현재 프로세스에서 실행하는 AssemblyTaskFactory로 전달하고, 그렇지 않으면 대상 컨텍스트와 일치하는 프로세스에서 작업을 실행하는 TaskHostFactory로 작업을 전달합니다.If the task is so designated, MSBuild passes it to the AssemblyTaskFactory, which runs it in the current process; otherwise, MSBuild passes the task to the TaskHostFactory, which runs the task in a process that matches the target context. 현재 컨텍스트 및 대상 컨텍스트가 일치하더라도 TaskFactoryTaskHostFactory로 설정하여 강제로 작업이 out-of-process로 실행되도록 할 수 있습니다(격리, 보안 또는 기타 이유로).Even if the current context and the target context match, you can force a task to run out-of-process (for isolation, security, or other reasons) by setting TaskFactory to TaskHostFactory.

<UsingTask TaskName="MisbehavingTask"   
   TaskFactory="TaskHostFactory"  
   AssemblyFile="$(MSBuildToolsPath)\MyTasks.dll">  
</UsingTask>  

가상 작업 매개 변수Phantom Task Parameters

다른 모든 작업 매개 변수와 마찬가지로 MSBuildRuntimeMSBuildArchitecture는 빌드 속성에서 설정할 수 있습니다.Like any other task parameters, MSBuildRuntime and MSBuildArchitecture can be set from build properties.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
   <PropertyGroup>  
      <FrameworkVersion>3.0</FrameworkVersion>  
   </PropertyGroup>  
   <Target Name="MyTarget">  
      <SimpleTask MSBuildRuntime="$(FrameworkVerion)" MSBuildArchitecture= "x86"/>  
   </Target>  
</Project>  

다른 작업 매개 변수와 달리 MSBuildRuntimeMSBuildArchitecture는 작업 자체에 표시되지 않습니다.Unlike other task parameters, MSBuildRuntime and MSBuildArchitecture are not apparent to the task itself. 실행되는 컨텍스트를 인식하는 작업을 작성하려면 .NET Framework를 호출하여 컨텍스트를 테스트하거나 빌드 속성을 사용하여 다른 작업 매개 변수를 통해 컨텍스트 정보를 전달해야 합니다.To write a task that is aware of the context in which it runs, you must either test the context by calling the .NET Framework, or use build properties to pass the context information through other task parameters.

참고

UsingTask 특성은 도구 집합 및 환경 속성에서 설정할 수 있습니다.UsingTask attributes can be set from toolset and environment properties.

MSBuildRuntimeMSBuildArchitecture 매개 변수는 대상 컨텍스트 뿐만 아니라 가장 제한적인 범위를 설정하는 가장 유연한 방법을 제공합니다.The MSBuildRuntime and MSBuildArchitecture parameters provide the most flexible way to set the target context, but also the most limited in scope. 한편 이러한 매개 변수는 작업 인스턴스 자체에서 설정되고 작업이 실행된 다음에야 평가되기 때문에 평가 시간과 빌드 시간에 모두 사용할 수 있는 전체 범위의 속성에서 값을 파생시킬 수 있습니다.On the one hand, because they are set on the task instance itself and are not evaluated until the task is about to run, they can derive their value from the full scope of properties available at both evaluation-time and build-time. 반면 이러한 매개 변수는 특정 대상에 있는 특정 작업 인스턴스에만 적용됩니다.On the other hand, these parameters only apply to a particular instance of a task in a particular target.

참고

작업 매개 변수는 작업 호스트의 컨텍스트가 아니라 부모 노드의 컨텍스트에서 평가됩니다. 런타임 종속적 또는 아키텍처 종속적 환경 변수(예: 프로그램 파일 위치)는 부모 노드와 일치하는 값으로 평가됩니다.Task parameters are evaluated in the context of the parent node, not in the context of the task host.Environment variables that are runtime- or architecture- dependent (such as the Program files location) will evaluate to the value that matches the parent node. 그러나 동일한 환경 변수를 작업에서 직접 읽을 경우 작업 호스트의 컨텍스트에서 올바르게 평가됩니다.However, if the same environment variable is read directly by the task, it will correctly be evaluated in the context of the task host.

참고 항목See Also

대상 및 작업 구성Configuring Targets and Tasks