다음을 통해 공유


연습: 모델에 액세스하는 텍스트 템플릿 디버깅

도메인 특정 언어 솔루션에서 텍스트 템플릿을 수정하거나 추가하는 경우 엔진이 템플릿을 소스 코드로 변환하거나 생성된 코드를 컴파일하면 오류가 발생할 수 있습니다. 다음 연습에서는 텍스트 템플릿을 디버그하기 위해 수행할 수 있는 몇 가지 작업을 보여줍니다.

참고 항목

일반적인 텍스트 템플릿에 대한 자세한 내용은 코드 생성 및 T4 텍스트 템플릿을 참조하세요. 텍스트 템플릿 디버그에 대한 자세한 내용은 연습: 텍스트 템플릿 디버그를 참조하세요.

도메인 특정 언어 솔루션 만들기

이 절차에서는 다음과 같은 특징이 있는 도메인 특정 언어 솔루션을 만듭니다.

  • 이름: DebuggingTestLanguage

  • 솔루션 템플릿: Minimal Language

  • 파일 확장명: .ddd

  • 회사 이름: Fabrikam

    도메인 특정 언어 솔루션 만들기에 대한 자세한 내용은 방법: 도메인 특정 언어 솔루션 만들기를 참조하세요.

텍스트 템플릿 만들기

솔루션에 텍스트 템플릿을 추가합니다.

텍스트 템플릿을 만들려면

  1. 솔루션을 빌드하고 디버거에서 실행을 시작합니다. (빌드 메뉴에서 솔루션 다시 빌드를 클릭하고 디버그 메뉴에서 디버그 시작을 클릭합니다.) 새 Visual Studio 인스턴스가 디버그 프로젝트를 엽니다.

  2. 이름이 DebugTest.tt인 텍스트 파일을 디버그 프로젝트에 추가합니다.

  3. DebugTest.tt의 사용자 지정 도구 속성이 TextTemplatingFileGenerator로 설정되었는지 확인합니다.

텍스트 템플릿에서 모델에 액세스하는 지시문 디버그

텍스트 템플릿의 문과 식에서 모델에 액세스하려면 먼저 생성된 지시문 프로세서를 호출해야 합니다. 생성된 지시문 프로세서를 호출하면 모델의 클래스를 텍스트 템플릿 코드에서 속성으로 사용할 수 있습니다. 자세한 내용은 텍스트 템플릿에서 모델 액세스를 참조하세요.

다음 절차에서는 잘못된 지시문 이름과 잘못된 속성 이름을 디버그합니다.

잘못된 지시문 이름을 디버그하려면

  1. DebugTest.tt의 코드를 다음 코드로 바꿉니다.

    참고 항목

    이 코드에는 오류가 포함되어 있습니다. 오류를 디버그하기 위해 오류가 포함되도록 합니다.

    <#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#>
    <#@ output extension=".txt" #>
    <#@ modelRoot processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
    Model: <#= this.ExampleModel #>
    <#
    foreach (ExampleElement element in this.ExampleModel.Elements)
    {
    #>
        Element: <#= element.Name #>
    <#
    }
    #>
    
  2. 솔루션 탐색기에서 DebugTest.tt를 마우스 오른쪽 단추로 클릭하고 사용자 지정 도구 실행을 클릭합니다.

    오류 목록 창에 다음 오류가 표시됩니다.

    ‘DebuggingTestLanguageDirectiveProcessor’ 프로세서에서 ‘modelRoot’ 지시문을 지원하지 않습니다. 변환이 실행되지 않습니다.

    이 경우 지시문 호출에 잘못된 지시문 이름이 포함됩니다. modelRoot를 지시문 이름으로 지정했으나 올바른 지시문 이름은 DebuggingTestLanguage입니다.

  3. 오류 목록 창에서 오류를 두 번 클릭하여 코드로 이동합니다.

  4. 코드를 수정하려면 지시문 이름을 DebuggingTestLanguage로 변경합니다.

    변경 내용이 강조 표시됩니다.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
  5. 솔루션 탐색기에서 DebugTest.tt를 마우스 오른쪽 단추로 클릭하고 사용자 지정 도구 실행을 클릭합니다.

    이제 시스템에서 텍스트 템플릿을 변환하고 해당 출력 파일을 생성합니다. 오류 목록 창에 오류가 표시되지 않습니다.

잘못된 속성 이름을 디버그하려면

  1. DebugTest.tt의 코드를 다음 코드로 바꿉니다.

    참고 항목

    이 코드에는 오류가 포함되어 있습니다. 오류를 디버그하기 위해 오류가 포함되도록 합니다.

    <#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#>
    <#@ output extension=".txt" #>
    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
    Model: <#= this.ExampleModel #>
    <#
    foreach (ExampleElement element in this.ExampleModel.Elements)
    {
    #>
        Element: <#= element.Name #>
    <#
    }
    #>
    
  2. 솔루션 탐색기에서 DebugTest.tt를 마우스 오른쪽 단추로 클릭하고 사용자 지정 도구 실행을 클릭합니다.

    오류 목록 창이 나타나고 다음 오류 중 하나가 표시됩니다.

    (C#)

    변환 컴파일 중: Microsoft.VisualStudio.TextTemplating<GUID>. GeneratedTextTransformation'에 'ExampleModel'에 대한 정의가 포함되어 있지 않습니다.

    (Visual Basic)

    컴파일 변환 중: 'ExampleModel'이 'Microsoft.VisualStudio.TextTemplating<GUID>.GeneratedTextTransformation'의 멤버가 아닙니다.

    이 경우 텍스트 템플릿 코드에 잘못된 속성 이름이 포함됩니다. ExampleModel을 속성 이름으로 지정했으나 올바른 속성 이름은 LibraryModel입니다. 다음 코드와 같이 provides 매개 변수에서 올바른 속성 이름을 찾을 수 있습니다.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
  3. 오류 목록 창에서 오류를 두 번 클릭하여 코드로 이동합니다.

  4. 코드를 수정하려면 텍스트 템플릿 코드의 속성 이름을 LibraryModel로 변경합니다.

    변경 내용은 강조 표시되어 있습니다.

    <#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#>
    <#@ output extension=".txt" #>
    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
    Model: <#= this.LibraryModel #>
    <#
    foreach (ExampleElement element in this.LibraryModel.Elements)
    {
    #>
        Element: <#= element.Name #>
    <#
    }
    #>
    
  5. 솔루션 탐색기에서 DebugTest.tt를 마우스 오른쪽 단추로 클릭하고 사용자 지정 도구 실행을 클릭합니다.

    이제 시스템에서 텍스트 템플릿을 변환하고 해당 출력 파일을 생성합니다. 오류 목록 창에 오류가 표시되지 않습니다.