다음을 통해 공유


연습: 텍스트 템플릿 디버깅

텍스트 템플릿을 디버깅하려면 템플릿 변환 프로세스의 두 가지 단계를 이해해야 합니다. 각 단계에서 다양한 클래스의 오류가 발생할 수 있습니다. 두 단계는 다음과 같습니다.

  1. 텍스트 템플릿 변환 엔진이 생성된 변환 클래스라는 클래스를 만듭니다. 생성된 변환 클래스를 만들기 위해 텍스트 템플릿 변환 엔진은 텍스트 템플릿의 구문을 분석할 수 있어야 합니다.

    이 단계에서 잘못된 태그와 같은 텍스트 템플릿의 오류로 인해 텍스트 템플릿의 구문이 분석되지 못할 수도 있습니다. 오류는 올바른 텍스트 템플릿 줄 번호와 함께 보고됩니다.

  2. 변환 엔진이 생성된 변환 클래스를 컴파일합니다.

    이 단계에서 코드 오류로 인해 생성된 변환 클래스가 컴파일되지 못할 수도 있습니다. 대부분의 오류는 올바른 텍스트 템플릿 줄 번호와 함께 보고됩니다. 템플릿 코드의 대괄호가 일치하지 않기 때문에 임시 파일 이름이 있는 변환된 클래스를 참조하는 오류가 발생할 수 있습니다.

  3. 컴파일된 변환 클래스가 실행되어 출력을 생성합니다.

    이 단계의 오류는 올바른 줄 번호와 함께 보고되지 않습니다. 템플릿 코드를 단계별로 실행할 수 있지만 다음 단원에 설명된 대로 디버거를 명시적으로 시작해야 합니다.

텍스트 템플릿을 디버깅하려면 먼저 텍스트 템플릿의 오류를 해결해야 합니다. 그런 다음 생성된 변환 클래스의 오류를 해결해야 합니다.

참고

텍스트 템플릿을 변환할 때 텍스트 템플릿, 생성된 변환 클래스, 텍스트 템플릿 내에서 호출하는 지시문 중 하나에서 오류가 발생할 수 있습니다. 이 연습에서는 텍스트 템플릿과 생성된 변환 클래스의 오류를 디버깅합니다. 그러나 이러한 절차를 사용하여 사용자 지정 지시문을 디버깅할 수도 있습니다.

이 연습에서 수행할 작업은 다음과 같습니다.

  • 잘못된 텍스트 템플릿 태그 디버깅

  • 템플릿 코드 단계별 실행

텍스트 템플릿 만들기

C# 콘솔 응용 프로그램 프로젝트를 만들고 텍스트 템플릿을 솔루션에 추가합니다. 이후 단계에서 이 텍스트 템플릿을 디버깅합니다.

텍스트 템플릿을 만들려면

  1. Visual Studio에서 새 C# 콘솔 응용 프로그램을 만들고 이름을 DebugTemplate으로 지정합니다.

  2. DebugTest.tt라는 텍스트 템플릿 파일을 DebugTemplate 프로젝트에 추가합니다.

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

  4. 다음 코드만 포함하도록 파일을 편집합니다.

    <#@ output extension=".txt" #> 
    
  5. 파일을 저장합니다.

    텍스트 템플릿이 변환되고 해당하는 출력 파일이 생성됩니다. 새 파일이 솔루션 탐색기에서 텍스트 템플릿 파일 아래에 나타납니다.

잘못된 텍스트 템플릿 태그 디버깅

텍스트 템플릿을 작성할 때의 일반적인 구문 오류는 잘못된 시작 태그나 끝 태그를 사용하는 것입니다. 이 절차에서는 잘못된 태그를 디버깅합니다.

잘못된 텍스트 템플릿 태그를 디버깅하려면

  1. DebugTest.tt에 다음 코드를 추가합니다.

    참고

    코드에 오류가 있습니다. 디버깅하기 위해 의도적으로 오류를 삽입하려고 합니다.

    <# for (int i = 0; i < 3; i++) { >
    Hello, World!
    <# } #>
    
  2. 파일을 저장합니다.

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

    블록 내에서 예기치 않은 시작 또는 끝 태그가 발견되었습니다. 시작 또는 끝 태그를 잘못 입력하지 않았고 템플릿에 중첩된 블록이 없는지 확인하십시오.

    이 경우 코드의 오류는 잘못된 끝 태그입니다. 끝 태그의 #이 없습니다.

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

  4. 코드를 수정하기 위해 #을 끝 태그에 추가합니다.

    <# for (int i = 0; i < 3; i++) { #>
    
  5. 파일을 저장합니다.

    이제 텍스트 템플릿이 변환되고 해당하는 출력 파일이 생성됩니다. 오류 목록 창에 오류가 없습니다.

템플릿 코드 단계별 실행

템플릿 코드를 단계별로 실행하려면 두 항목을 템플릿에 추가해야 합니다.

  • <@#template debug="true" #>

  • System.Diagnostics.Debugger.Launch();

다음 절차에서는 존재하지 않는 요소 인덱스를 디버깅합니다. 이 오류는 이전 절차의 오류와 유사합니다. 그러나 이번에는 Visual Studio 디버거를 사용하여 오류를 디버깅합니다.

디버거를 사용하여 디버깅하려면

  1. C:\nonsense 폴더를 만든 다음 nonsense.xml이라는 빈 텍스트 파일을 이 폴더에 저장합니다.

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

    참고

    코드에 오류가 있습니다. 디버깅하기 위해 의도적으로 오류를 삽입하려고 합니다.

    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#
    XmlDocument xDoc = new XmlDocument();
       xDoc.Load(@"C:\nonsense\nonsense.xml");
       XmlAttributeCollection attributes = xDoc.Attributes;
       if (attributes != null)
       {
          foreach (XmlAttribute attr in attributes)
          { #>
           <#=  attr.Name #>
       <# }
       }
       #>
    
  3. 파일을 저장합니다.

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

    변환을 실행하는 중: System.Xml.XmlException: 루트 요소가 없습니다.

  4. debug 매개 변수를 true로 설정하여 template 지시문을 추가합니다.

    <#@ template debug="true" #>
    
  5. System.Diagnostics.Debugger.Launch() 문을 텍스트 템플릿 코드에 추가합니다.

    코드는 다음과 같습니다.

    <#@ template debug="true" #>
    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#
       XmlDocument xDoc = new XmlDocument();
       System.Diagnostics.Debugger.Launch();
       xDoc.Load(@"C:\nonsense\nonsense.xml");
       XmlAttributeCollection attributes = xDoc.Attributes;
       if (attributes != null)
       { 
          foreach (XmlAttribute attr in attributes)
          { #>
           <#=  attr.Name #>
       <# }
       }
     #> 
    
  6. 변환을 다시 실행합니다.

    Visual Studio Just-In-Time Debugger 대화 상자가 나타납니다.

  7. 사용 가능한 디버거 목록에서 새 인스턴스 Visual Studio 2010을 클릭하고 를 클릭합니다.

    DebugTest.tt가 Visual Studio의 새 인스턴스에서 열립니다. 

  8. 다음 줄까지 코드를 단계별로 실행합니다.

    xDoc.Load(@"C:\nonsense\nonsense.xml");
    
  9. 오류가 이 줄에서 발생합니다.

  10. 두 번째 Visual Studio 인스턴스를 닫습니다.

    1. 디버그 메뉴에서 디버깅 중지를 클릭합니다.

    2. 파일 메뉴에서 끝내기를 클릭합니다.

    3. 변경 내용을 솔루션에 저장할지 확인하는 메시지가 나타나면 아니요를 클릭합니다.

      두 번째 Visual Studio 인스턴스가 닫힙니다.

  11. 텍스트 템플릿을 수정하고 디버깅 기능을 제거합니다.

    1. 솔루션 탐색기에서 DebugTest.tt를 두 번 클릭하여 편집기에서 엽니다.

    2. 잘못된 파일 이름을 수정합니다. 예를 들어, 다음과 같이 바꿉니다.

      @"C:\\Program Files\\Microsoft Visual Studio 10.0\\Xml\\SnippetsIndex.xml"

    3. template 지시문과 오류가 발생한 줄을 제거합니다.

      텍스트 템플릿은 다음과 같습니다.

      <#@ output extension=".txt" #>
      <#@ assembly name="System.Xml.dll" #>
      <#@ import namespace="System.Xml" #>
      <#
          XmlDocument xDoc = new XmlDocument();
          xDoc.Load(@"C:\Program Files\Microsoft Visual Studio 10.0\Xml\SnippetsIndex.xml");
          foreach (XmlNode node in xDoc.SelectNodes("//*"))
          {  #>
             <#= node.Name #>
         <#  }
      #>
      

DebugTest.tt를 저장합니다. 오류가 없고 생성되는 .txt 파일에 XML 파일의 노드 이름 목록이 있는지 확인합니다.

참고 항목

참조

텍스트 템플릿을 사용하는 동안 일반적인 오류 및 경고