방법: Visual Studio 빌드 프로세스 확장How to: Extend the Visual Studio Build Process

Visual StudioVisual Studio 빌드 프로세스는 프로젝트 파일로 가져온 일련의 MSBuildMSBuild .targets 파일로 정의됩니다.The Visual StudioVisual Studio build process is defined by a series of MSBuildMSBuild .targets files that are imported into your project file. 이러한 가져온 파일 중 하나인 Microsoft.Common.targets는 빌드 프로세스의 여러 지점에서 사용자 지정 작업을 실행할 수 있도록 확장될 수 있습니다.One of these imported files, Microsoft.Common.targets, can be extended to allow you to run custom tasks at several points in the build process. 이 항목에서는 Visual StudioVisual Studio 빌드 프로세스를 확장하는 데 사용할 수 있는 두 가지 방법을 설명합니다.This topic explains two methods you can use to extend the Visual StudioVisual Studio build process:

  • Microsoft.Common.targets에 정의된 특정 미리 정의된 대상 재정의Overriding specific predefined targets defined in Microsoft.Common.targets.

  • Microsoft.Common.targets에 정의된 "DependsOn" 속성 재정의Overriding the "DependsOn" properties defined in Microsoft.Common.targets.

미리 정의된 대상 재정의Overriding Predefined Targets

Microsoft.Common.targets 파일은 빌드 프로세스의 일부 주요 대상의 전후에 호출되는 미리 정의된 빈 대상 집합을 포함합니다.The Microsoft.Common.targets file contains a set of predefined empty targets that are called before and after some of the major targets in the build process. 예를 들어 MSBuildMSBuild은(는) 메인 BeforeBuild 대상 전에 CoreBuild 대상을 호출하고 CoreBuild 대상 후에 AfterBuild 대상을 호출합니다.For example, MSBuildMSBuild calls the BeforeBuild target before the main CoreBuild target and the AfterBuild target after the CoreBuild target. 기본적으로 Microsoft.Common.targets의 빈 대상은 아무 것도 수행하지 않지만 프로젝트 파일에서 Microsoft.Common.targets를 가져오는 원하는 대상을 정의하여 해당 기본 동작을 재정의할 수 있습니다.By default, the empty targets in Microsoft.Common.targets do nothing, but you can override their default behavior by defining the targets you want in a project file that imports Microsoft.Common.targets. 이를 통해 MSBuildMSBuild 작업을 사용하여 빌드 프로세스에 대한 더 많은 제어를 제공할 수 있습니다.By doing this, you can use MSBuildMSBuild tasks to give you more control over the build process.

미리 정의된 대상을 재정의하려면To override a predefined target

  1. 재정의하려는 Microsoft.Common.targets에서 미리 정의된 대상을 식별합니다.Identify a predefined target in Microsoft.Common.targets that you want to override. 안전하게 재정의할 수 있는 대상의 전체 목록은 아래 표를 참조하세요.See the table below for the complete list of targets that you can safely override.

  2. </Project> 태그 바로 앞에, 프로젝트 파일의 끝에 하나 이상의 대상을 정의합니다.Define the target or targets at the end of your project file, immediately before the </Project> tag. 예:For example:

    <Project>  
        ...  
        <Target Name="BeforeBuild">  
            <!-- Insert tasks to run before build here -->  
        </Target>  
        <Target Name="AfterBuild">  
            <!-- Insert tasks to run after build here -->  
        </Target>  
    </Project>  
    
  3. 프로젝트 파일을 빌드합니다.Build the project file.

    다음 표는 안전하게 재정의할 수 있는 Microsoft.Common.targets에서 모든 대상을 표시합니다.The following table shows all of the targets in Microsoft.Common.targets that you can safely override.

대상 이름Target Name 설명Description
BeforeCompile, AfterCompileBeforeCompile, AfterCompile 이러한 대상 중 하나에 삽입된 작업은 핵심 컴파일이 완료되기 전이나 후에 실행됩니다.Tasks inserted in one of these targets run before or after core compilation is done. 대부분의 사용자 지정은 이러한 두 개의 대상 중 하나에서 수행됩니다.Most customizations are done in one of these two targets.
BeforeBuild, AfterBuildBeforeBuild, AfterBuild 이러한 대상 중 하나에 삽입된 작업은 빌드의 모든 작업 전이나 후에 실행됩니다.Tasks inserted in one of these targets will run before or after everything else in the build. 참고: BeforeBuildAfterBuild 대상은 대부분의 프로젝트 파일 끝의 주석에서 이미 정의되어 있습니다.Note: The BeforeBuild and AfterBuild targets are already defined in comments at the end of most project files. 이를 통해 빌드 전 및 후 이벤트를 프로젝트 파일에 쉽게 추가할 수 있습니다.This allows you to easily add pre- and post-build events to your project file.
BeforeRebuild, AfterRebuildBeforeRebuild, AfterRebuild 이러한 대상 중 하나에 삽입된 작업은 핵심 다시 빌드 기능이 호출되기 전 또는 후에 실행됩니다.Tasks inserted in one of these targets run before or after the core rebuild functionality is invoked. Microsoft.Common.targets에서 대상 실행 순서는 BeforeRebuild, Clean, BuildAfterRebuild입니다.The order of target execution in Microsoft.Common.targets is: BeforeRebuild, Clean, Build, and then AfterRebuild.
BeforeClean, AfterCleanBeforeClean, AfterClean 이러한 대상 중 하나에 삽입된 작업은 핵심 정리 기능이 호출되기 전 또는 후에 실행됩니다.Tasks inserted in one of these targets run before or after the core clean functionality is invoked.
BeforePublish, AfterPublishBeforePublish, AfterPublish 이러한 대상 중 하나에 삽입된 작업은 핵심 게시 기능이 호출되기 전 또는 후에 실행됩니다.Tasks inserted in one of these targets run before or after the core publish functionality is invoked.
BeforeResolveReference, AfterResolveReferencesBeforeResolveReference, AfterResolveReferences 이러한 대상 중 하나에 삽입된 작업은 어셈블리 참조가 확인되기 전이나 후에 실행됩니다.Tasks inserted in one of these targets run before or after assembly references are resolved.
BeforeResGen, AfterResGenBeforeResGen, AfterResGen 이러한 대상 중 하나에 삽입된 작업은 어셈블리 리소스가 생성되기 전이나 후에 실행됩니다.Tasks inserted in one of these targets run before or after resources are generated.

"DependsOn" 속성 재정의Overriding "DependsOn" Properties

미리 정의된 대상 재정의는 빌드 프로세스를 확장하는 쉬운 방법이지만 MSBuildMSBuild에서 대상의 정의를 순차적으로 평가하므로 프로젝트를 가져오는 다른 프로젝트에서 이미 재정의한 대상을 재정의하는 것을 방지할 방법이 없습니다.Overriding predefined targets is an easy way to extend the build process, but, because MSBuildMSBuild evaluates the definition of targets sequentially, there is no way to prevent another project that imports your project from overriding the targets you already have overridden. 따라서 예를 들어 다른 모든 프로젝트를 가져온 후 프로젝트에서 정의된 마지막 AfterBuild 대상은 빌드 중 사용되는 대상이 됩니다.So, for example, the last AfterBuild target defined in the project file, after all other projects have been imported, will be the one that is used during the build.

Microsoft.Common.targets 파일 전체의 DependsOnTargets 특성에서 사용되는 "DependsOn" 속성을 재정의하여 의도하지 않은 대상의 재정의를 방지할 수 있습니다.You can guard against unintended overrides of targets by overriding the "DependsOn" properties that are used in DependsOnTargets attributes throughout the Microsoft.Common.targets file. 예를 들어 Build 대상은 "$(BuildDependsOn)"DependsOnTargets 특성 값을 포함합니다.For example, the Build target contains a DependsOnTargets attribute value of "$(BuildDependsOn)". 고려 사항:Consider:

<Target Name="Build" DependsOnTargets="$(BuildDependsOn)"/>  

이 XML 조각은 Build 대상 전에 실행할 수 있음을 나타내며 BuildDependsOn 속성에 지정된 모든 대상은 먼저 실행되어야 합니다.This piece of XML indicates that before the Build target can run, all the targets specified in the BuildDependsOn property must run first. BuildDependsOn 속성은 다음으로 정의됩니다.The BuildDependsOn property is defined as:

<PropertyGroup>  
    <BuildDependsOn>  
        BeforeBuild;  
        CoreBuild;  
        AfterBuild  
    </BuildDependsOn>  
</PropertyGroup>  

프로젝트 파일의 끝에서 BuildDependsOn이라는 다른 속성을 선언하여 이 속성 값을 재정의할 수 있습니다.You can override this property value by declaring another property named BuildDependsOn at the end of your project file. 새 속성에서 이전 BuildDependsOn 속성을 포함하여 대상 목록의 시작과 끝에 새 대상을 추가할 수 있습니다.By including the previous BuildDependsOn property in the new property, you can add new targets to the beginning and end of the target list. 예:For example:

<PropertyGroup>  
    <BuildDependsOn>  
        MyCustomTarget1;  
        $(BuildDependsOn);  
        MyCustomTarget2  
    </BuildDependsOn>  
</PropertyGroup>  

<Target Name="MyCustomTarget1">  
    <Message Text="Running MyCustomTarget1..."/>  
</Target>  
<Target Name="MyCustomTarget2">  
    <Message Text="Running MyCustomTarget2..."/>  
</Target>  

프로젝트 파일을 가져오는 프로젝트는 만든 사용자 지정 항목을 덮어쓰지 않고 이러한 속성을 재정의할 수 있습니다.Projects that import your project files can override these properties without overwriting the customizations that you have made.

"DependsOn" 속성을 재정의하려면To override a "DependsOn" property

  1. 재정의하려는 Microsoft.Common.targets에서 미리 정의된 "DependsOn" 속성을 식별합니다.Identify a predefined "DependsOn" property in Microsoft.Common.targets that you want to override. 일반적으로 재정의된 "DependsOn" 속성의 목록은 아래 표를 참조하세요.See the table below for a list of the commonly overridden "DependsOn" properties.

  2. 프로젝트 파일의 끝에서 속성의 다른 인스턴스를 정의합니다.Define another instance of the property or properties at the end of your project file. 새 속성에 원래 속성을 포함합니다(예: $(BuildDependsOn)).Include the original property, for example $(BuildDependsOn), in the new property.

  3. 속성 정의 앞 또는 뒤에 사용자 지정 대상을 정의합니다.Define your custom targets before or after the property definition.

  4. 프로젝트 파일을 빌드합니다.Build the project file.

일반적으로 재정의된 "DependsOn" 속성Commonly Overridden "DependsOn" Properties

속성 이름Property Name 설명Description
BuildDependsOn 전체 빌드 프로세스 앞이나 뒤에 사용자 지정 대상을 삽입하려는 경우 재정의할 속성입니다.The property to override if you want to insert custom targets before or after the entire build process.
CleanDependsOn 사용자 지정 빌드 프로세스에서 출력을 정리하려는 경우 재정의할 속성입니다.The property to override if you want to clean up output from your custom build process.
CompileDependsOn 컴파일 단계 앞이나 뒤에 사용자 지정 프로세스를 삽입하려는 경우 재정의할 속성입니다.The property to override if you want to insert custom processes before or after the compilation step.

참고 항목See Also

Visual Studio 통합 Visual Studio Integration
MSBuild 개념 MSBuild Concepts
.Targets 파일.Targets Files