빌드 프로세스의 코드 생성

Visual Studio 솔루션 빌드 프로세스의 일부로 텍스트 변환을 호출할 수 있습니다. 텍스트 변환을 사용하면 템플릿에서 생성된 파일을 컴파일하기 전의 최신 상태로 유지할 수 있습니다. 따라서 사용자가 프로젝트를 빌드하거나 코드를 체크 인하기 전에 깜빡 잊고 모든 템플릿 변환을 클릭하지 않는 상황이 발생하지 않습니다. 테스트 변환 작업은 Visual Studio 또는 MSBuild를 통해 빌드 서버에서 수행할 수 있습니다.

프로젝트 파일에 텍스트 변환 작업 포함

Visualization and Modeling SDK 설치

개발 컴퓨터에서 빌드 작업을 사용하도록 설정하려면 Visual Studio Visualization and Modeling SDK (was DSL SDK)를 설치합니다.

빌드 서버에서 빌드 작업을 사용하도록 설정하려면 빌드 서버에서 텍스트 변환을 참조하십시오.

프로젝트 파일 편집

텍스트 변환을 호출하려면 프로젝트를 정의하는 파일을 편집해야 합니다. 이러한 속성은 프로젝트 속성 편집기에서 편집할 수 없습니다. 따라서 프로젝트를 닫고 텍스트 파일로 편집해야 합니다.

프로젝트 파일의 텍스트를 편집하려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 언로드를 클릭합니다.

  2. 프로젝트를 다시 마우스 오른쪽 단추로 클릭한 다음 project 편집을 클릭합니다.

    프로젝트 파일의 텍스트가 XML 편집기에 나타납니다.

편집을 마치고 프로젝트를 다시 열려면

  1. XML 편집기를 닫습니다.

  2. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 다시 로드를 클릭합니다.

텍스트 변환 대상 가져오기

텍스트 변환 빌드 작업은 한 파일에 정의됩니다. 표준 C# 또는 Visual Basic 대상 다음에 이 파일을 가져와야 합니다.

텍스트 변환 대상을 가져오려면

  1. 파일에서 다음 코드 중 하나와 유사한 코드를 검색합니다.

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

    -또는-

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

  2. 이 코드 뒤에 텍스트 템플릿 가져오기를 삽입합니다.

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

속성을 설정하여 빌드가 수행되는 방법 제어

프로젝트 파일에 다음 텍스트를 삽입합니다. 이 속성 그룹에 삽입할 수 있는 다른 속성을 보려면 이후의 단원을 참조하십시오.

<PropertyGroup>
 <TransformOnBuild>true</TransformOnBuild>
 <!-- Other properties can be inserted here -->
</PropertyGroup>

TransformOnBuild는 프로젝트를 빌드할 때 프로젝트의 모든 템플릿이 실행되도록 합니다.

변환 호출

프로젝트 빌드의 모든 템플릿 변환

프로젝트 파일에 다음 속성을 포함하는 경우 프로젝트가 증분 빌드 기능에 따라 빌드될 때마다 프로젝트의 모든 텍스트 템플릿이 실행됩니다.

<TransformOnBuild>true</TransformOnBuild>

Visual Studio에서 F5 키를 누르거나 MSBuild를 사용하여 변환을 호출할 수 있습니다. 예를 들면 다음과 같습니다.

msbuild myproject.csproj

TransformOnBuild를 생략하거나 false로 설정하면 템플릿이 프로젝트 빌드 중에 자동으로 변환되지 않습니다.

참조 경로 추가

호스트에서 템플릿에 참조된 어셈블리를 검색하는 경로의 집합에 추가할 수 있습니다. 예를 들면 다음과 같습니다.

<ItemGroup>
    <!-- Add VS\...\PublicAssemblies to the list of places
         to look for assemblies used by templates. -->
    <T4ReferencePath Include="$(VsIdePath)PublicAssemblies\" />
</ItemGroup>

특정 템플릿 변환

msbuild 유틸리티에서 Transform 작업을 호출하여 지정된 파일을 변환할 수 있습니다. 이 작업은 TransformOnBuild 속성을 사용하지 않으며 프로젝트 파일을 컴파일하지 않습니다. 이전 단원에 설명된 대로 텍스트 템플릿 대상 파일을 가져와야 합니다.

예를 들어, 특정 파일을 변환하려면 다음 코드를 사용합니다.

msbuild myproj.proj /t:Transform /p:TransformFile=MyTemplate.tt

TransformFile 매개 변수에서 와일드카드 문자를 사용할 수도 있습니다. 예를 들어, 다음 명령은 GeneratedCode 폴더 아래의 모든 .tt 파일을 변환합니다.

msbuild dsl.csproj /t:Transform /p:TransformFile="GeneratedCode\**\*.tt"

증분 빌드

기본적으로 빌드 관리자는 템플릿의 출력 파일이 최신인 경우 템플릿 실행을 방지하려고 합니다. 이를 위해 빌드 관리자는 파일 시스템을 모니터링하여 템플릿 코드에서 읽은 파일을 확인합니다. 이후 빌드 관리자는 이러한 파일의 수정 날짜를 출력 파일의 날짜와 비교하고 입력 파일이 출력 파일보다 최근에 수정되었으면 템플릿을 실행합니다. 템플릿의 이전 실행에 대한 정보가 없는 경우에도 템플릿이 실행됩니다.

결과적으로 출력 파일이 다음 파일보다 오래되었으면 다시 생성됩니다.

  • 텍스트 템플릿 파일

  • <#@include#> 지시문에 지정된 파일

  • 템플릿의 코드에서 읽은 파일

  • 템플릿에 사용되는 지시문 프로세서가 포함하거나 읽은 파일

모든 템플릿이 각 빌드에서 실행되도록 하려면 다음 속성을 삽입합니다.

<TransformOutOfDateOnly>false</TransformOutOfDateOnly>

소스 제어

소스 제어 시스템과의 특정 기본 제공 통합은 없습니다. 그러나 생성된 파일의 체크 아웃 및 체크 인 등을 수행하기 위해 사용자 고유의 확장을 추가할 수 있습니다.

기본적으로 텍스트 변환 작업에서는 읽기 전용으로 표시된 파일을 덮어쓰지 않으며 이러한 파일이 발견되면 오류가 Visual Studio 오류 목록에 기록되고 작업이 실패합니다.

읽기 전용 파일을 덮어쓰도록 지정하려면 다음 속성을 삽입합니다.

<OverwriteReadOnlyOuputFiles>true</OverwriteReadOnlyOuputFiles>

후처리 단계를 사용자 지정하지 않는 한 파일을 덮어쓸 때 경고가 오류 목록에 기록됩니다.

빌드 프로세스 사용자 지정

덮어쓴 파일의 체크 아웃 등을 수행하기 위해 빌드 프로세스를 사용자 지정할 수 있습니다. 변환 전후에 호출되는 두 가지 사용자 지정 지점이 제공됩니다.

이러한 지점을 정의하려면 $(BeforeTransform) 및 $(AfterTransform) 속성을 정의합니다.

예를 들면 다음과 같습니다.

<PropertyGroup>
    <BeforeTransform>CustomPreTransform</BeforeTransform>
    <AfterTransform>CustomPostTransform;$(AfterTransform)</AfterTransform>
  </PropertyGroup>
  <Target Name="CustomPreTransform">
    <Message Text="In CustomPreTransform..." Importance="High" />
  </Target>
  <Target Name="CustomPostTransform">
    <Message Text="In CustomPostTransform..." Importance="High" />
  </Target>

AfterTransform에서 다음 코드를 참조할 수 있습니다.

  • GeneratedFiles - 프로세스에서 쓴 파일의 목록입니다. 기존 읽기 전용 파일을 덮어쓴 파일의 경우 %(GeneratedFiles.ReadOnlyFileOverwritten)이 true입니다. 이러한 파일은 소스 제어에서 체크 아웃할 수 있습니다.

  • NonGeneratedFiles - 덮어쓰지 않은 읽기 전용 파일의 목록입니다.

이러한 목록을 사용하여 덮어쓴 파일을 체크 아웃하는 등의 작업을 수행할 수 있습니다.

빌드 서버에서 텍스트 변환

Visual Studio가 설치되어 있지 않은 컴퓨터에서 빌드 서버를 실행하는 경우 Visual Studio SDK가 설치된 컴퓨터에서 빌드 컴퓨터로 다음 파일을 복사해야 합니다.

  • \Program Files\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\v4.0\

    • Microsoft.VisualStudio.TextTemplating.10.0.dll

    • Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll

    • Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll

  • \Program Files\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\

    • Microsoft.VisualStudio.TextTemplating.Sdk.Host.10.0.dll
  • \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

    • Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll

자세한 내용은 빌드 컨트롤러 만들기 및 작업을 참조하십시오.

참고 항목

기타 리소스

Visual Studio Visualization and Modeling SDK (was DSL SDK)