T4 텍스트 템플릿 디버깅

 

Visual Studio 2017 에 대한 최신 설명서는 Visual Studio 2017 설명서를 참조하세요.

텍스트 서식 파일에서 중단점을 설정할 수 있습니다. 디자인 타임 텍스트 템플릿을 디버그, 텍스트 템플릿 파일을 저장 한 다음 선택 T4 템플릿 디버그 솔루션 탐색기에서 파일의 바로 가기 메뉴입니다. 런타임 텍스트 템플릿 디버깅을 속해 있는 응용 프로그램을 디버깅 하면 됩니다.

텍스트 서식 파일을 디버깅 하려면 템플릿 변환 프로세스의 단계를 이해 해야 합니다. 다른 종류의 오류는 각 단계 내에서 발생할 수 있습니다. 단계는 다음과 같습니다.

단계디자인 타임 템플릿을: 발생 시기런타임 템플릿에서: 발생 시기
코드가는 텍스트 템플릿에서 생성 됩니다.

지시문의 오류 또는 맞지 않거나 disordered <#…#> 태그입니다.
서식 파일을 저장 하거나 텍스트 변환을 호출 합니다.서식 파일을 저장 하거나 텍스트 변환을 호출 합니다.
생성 된 코드는 컴파일됩니다.

템플릿 코드에 컴파일 오류입니다.
이전 단계 직후.응용 프로그램 코드와 함께
코드를 실행합니다.

템플릿 코드에 런타임 오류입니다.
이전 단계 직후.때 응용 프로그램을 실행 하 고 템플릿 코드를 호출 합니다.

대부분의 경우에서 템플릿 코드에 줄 번호는 오류 보고서에 제공 됩니다. 오류 보고서를 임시 파일 이름으로 참조 하는 경우 일반적인 원인은 텍스트 템플릿의 코드에서 일치 하지 않는 괄호입니다.

텍스트 서식 파일에 중단점을 설정 하 고 일반적인 방법으로 디버그할 수 있습니다.

다음 표에서 가장 일반적인 오류 및 해당 수정 프로그램을 나열합니다.

오류 메시지설명솔루션
Transformation 클래스가 상속하는 기본 클래스 '{0}'을(를) 로드하지 못했습니다.에 지정 된 기본 클래스를 찾을 수 없는 경우에 발생는 inherits 템플릿 지시문에 대 한 매개 변수입니다. 메시지는 템플릿 지시문의 줄 번호를 제공 합니다.지정 된 클래스가 존재 하 고 어셈블리에 존재 하는 어셈블리 지시문에 지정 되어 있는지 있어야 합니다.
파일에 대한 포함 텍스트를 확인하지 못했습니다. {0}포함된 된 템플릿을 찾을 수 없을 때 발생 합니다. 메시지에서 요청 된 포함 파일의 이름을 제공 합니다.파일 경로가 원본 템플릿 경로 기준으로 호스트에 등록 되어 있는 위치에 파일 인지 또는 파일에 전체 경로가 있어야 합니다.
변환 개체를 초기화 하는 동안 오류가 발생 했습니다. 변환을 실행 되지 않습니다.에 있는 initialize (')' 변환 클래스의 되지 않았거나 false를 반환 하는 경우 발생 합니다.Initialize () 함수에 코드에 지정 된 기본 변환 클래스에서 제공 되는 <#@template#> 지시문 또는 지시문 프로세서. 초기화 실패를 발생 시킨 오류는 오류 목록입니다. 실패 한 이유를 조사 합니다. 서식 파일을 디버깅 하는 절차에 따라 생성 되는 실제 코드 initialize ()에 대 한 살펴볼 수 있습니다.
지시문 프로세서 '{1 }'에 대 한 어셈블리 ' {0} '이 (가)는 FullTrust 권한 집합이 부여 되지 않은 합니다. 신뢰할 수 있는 어셈블리에만 지시문 프로세서를 제공할 수 있습니다. 이 지시문 프로세서를 로드 하지 않습니다.시스템은 지시문 프로세서를 포함 하는 어셈블리에 FullTrust 권한을 부여 하지 않을 때 발생 합니다. 메시지에서 지시문 프로세서의 이름과 어셈블리의 이름을 제공 합니다.로컬 컴퓨터에서 신뢰할 수 있는 어셈블리 에서만 사용 해야 합니다.
경로 ' {'이 (가)이이 컴퓨터에 로컬 또는 신뢰할 수 있는의 일부 여야 합니다.지시문 또는 어셈블리 지시문 파일을 로컬 컴퓨터에 없는 또는 네트워크의 신뢰할 수 있는 영역에서 참조 하는 경우 발생 합니다.지시문 또는 어셈블리 지시문 있는 디렉터리를 신뢰할 수 있는 영역에 표시 해야 합니다. Internet Explorer를 통해 신뢰할 수 있는 표준 시간대로 네트워크 디렉터리를 추가할 수 있습니다.
"잘못 된 토큰 ' catch'" 또는 "네임 스페이스 멤버를 포함할 직접 수 없습니다"와 같은 여러 구문 오류템플릿 코드에 닫는 중괄호가 너무 많습니다. 컴파일러는 표준 생성 코드와 혼동 합니다.닫는 중괄호 및 괄호 안에 코드 구분 기호 수를 확인 합니다.
루프 또는 조건부 컴파일 또는 제대로 실행 되지 않습니다. 예: <#if (i>10)#> Number is: <#= i #>

이 코드는 항상 값을 출력 했습니다. 만 "번호는:" 하는 데 조건이 있습니다.
C#에서는 항상를 제어문에 포함 된 텍스트 블록을 묶는 중괄호를 사용 합니다.중괄호를 추가 합니다. <#if (i>10) { #> Number is: <#= i #><# } #>합니다.
"식이 너무 복잡 합니다" 때 전처리 된 런타임 서식 파일 컴파일 또는 디자인 타임 템플릿을 처리 합니다.

 Visual Studio 런타임 템플릿에서 생성 된 코드를 검사 하려고 할 때 작동을 멈춥니다.
텍스트 블록 너무 깁니다. T4는 텍스트 블록 각 템플릿 줄에 하나의 문자열 리터럴을 포함 하는 문자열 연결 식을 변환합니다. 매우 긴 텍스트 블록에는 컴파일러의 크기 제한을 한도가 있습니다.와 같은 식 블록으로 긴 텍스트 블록을 분류 합니다.

 <#= "" #>

다음 표에서 사용 가능한 경우 수정 프로그램과 함께 가장 일반적인 경고를 나열 합니다.

경고 메시지설명솔루션
로드 하는 포함 파일 ' {'이 (가) null 또는 빈 문자열이 반환 됩니다.포함 된 텍스트 템플릿 파일은 비어 있는 경우 발생 합니다. 메시지에 포함 된 파일의 파일 이름을 제공 합니다.Include 지시문을 제거 하거나 파일에는 일부 콘텐츠 있어야 합니다.
변환을 컴파일하는 중:모든 오류 또는 변환을 컴파일할 때 컴파일러에서 생성 되는 경고에이 문자열 앞에 추가 합니다. 이 문자열은 컴파일러에서 경고나 오류를 의미 합니다.DLL을 찾는 데 문제가 있으면 DLL이 GAC에 전체 경로 또는 정규화 된 강력한 이름을 제공 해야 합니다.
지시문에 매개 변수 ' {0} '이 (가) 이미 있습니다. 중복 된 매개 변수는 무시 됩니다.지시문에서 매개 변수를 두 번 이상 지정 하는 경우 발생 합니다. 메시지는 지시문의 줄 번호 및 매개 변수의 이름을 제공합니다.중복 된 매개 변수 지정을 제거 합니다.
포함 파일 ' {'이 (가) 로드 하는 동안 오류가 발생 했습니다. Include 지시문은 무시 됩니다.에 지정 된 파일을 찾을 수 없는 경우에 발생 한 include 지시문입니다. 메시지 파일 이름과 지시문의 줄 번호를 제공합니다.포함 파일이 있는 원래 텍스트 템플릿 파일과 동일한 디렉터리에 또는 등록 된 호스트 포함 디렉터리 중 하나에 있어야 합니다.
변환 클래스에 대 한 잘못 된 기본 클래스가 지정 되었습니다. 기본 클래스는 Microsoft.VisualStudio.TextTemplating.TextTransformation에서 파생 되어야 합니다.발생 경우는 inherits 에서 상속 되지 않는 클래스를 지정 하는 템플릿 지시문에 대 한 매개 변수 TextTransformation합니다. 메시지는 템플릿 지시문의 줄 번호를 제공 합니다.파생 된 클래스 지정 TextTransformation합니다.
잘못 된 문화권 'template' 지시문에 지정 되었습니다. 문화권 "XX-XX" 형식 이어야 합니다. 고정 문화권이 사용 됩니다.템플릿 지시문에서 culture 매개 변수를 올바르게 지정 하는 경우 발생 합니다. 메시지는 템플릿 지시문의 줄 번호를 제공 합니다.Culture 매개 변수는 유효한 문화권 "XX-XX" 형식으로 변경 합니다.
템플릿 지시문에는 잘못 된 디버그 값 ' {'이 (가) 지정 되었습니다. 디버그 값 "true" 또는 "false" 여야 합니다. 기본값은 "false"가 사용 됩니다.발생 경우는 debug 템플릿 지시문에 대 한 매개 변수를 올바르게 지정 합니다. 메시지는 템플릿 지시문의 줄 번호를 제공 합니다."True" 또는 "false"로 debug 매개 변수를 설정 합니다.
템플릿 지시문에는 잘못 된 HostSpecific 값 ' {'이 (가) 지정 되었습니다. HostSpecific 값 "true" 또는 "false" 여야 합니다. 기본값은 "false"가 사용 됩니다.발생 경우 호스트 관련 매개 변수는 template 지시문 잘못 지정 되었습니다. 메시지는 템플릿 지시문의 줄 번호를 제공 합니다."True" 또는 "false"로 호스트 관련 매개 변수를 설정 합니다.
'Template' 지시문에 잘못 된 언어 ' {0} '이 (가) 지정 되었습니다. "C#" 또는 "VB" 언어 여야 합니다. "C#"의 기본 값이 사용 됩니다.에 지원 되지 않는 언어를 지정 하는 경우 발생는 template 지시문입니다. 만 "C#" 또는 "VB" (대/소문자 구분) 허용 됩니다. 메시지는 템플릿 지시문의 줄 번호를 제공 합니다.설정의 language "C#" 또는 "VB"를 템플릿 지시문에 대 한 매개 변수입니다.
템플릿의 출력 지시문을 여러 개 찾았습니다. 첫 번째를 제외한 모든 무시 됩니다.발생 경우 여러 output 지시문은 템플릿 파일에 지정 됩니다. 메시지는 중복 출력 지시문의 줄 번호를 제공합니다.중복 제거 output 지시문입니다.
여러 템플릿 지시문은 서식 파일에서 발견 되었습니다. 첫 번째를 제외한 모든 무시 됩니다. 템플릿 지시문에 여러 매개 변수는 템플릿 지시문에 지정 되어야 합니다.여러 개 지정 하는 경우에 발생 template (포함 된 파일 포함)은 텍스트 템플릿 파일 내에서 지시문입니다. 메시지는 중복 된 템플릿 지시문의 줄 번호를 제공 합니다.다른 집계 template 하나로 지시문 template 지시문입니다.
' {0} '이 (가) 라는 지시문에 대 한 지정 된 프로세서가 없습니다. 지시문은 무시 됩니다.지정 하는 경우에 발생 한 custom 지시문을 제공 하지 않습니다는 processor 특성입니다. 메시지 이름 지시문 및 줄 번호를 제공합니다.제공 된 processor 특성의 이름으로는 directive 지시문에 대 한 프로세서.
'{1 }' 인 지시문 프로세서를 ' {0} '이 (가)를 찾을 수 없습니다. 지시문은 무시 됩니다.시스템에서 찾을 수 없을 때 발생는 directive 내에서 지정 된 프로세서는 custom 지시문입니다. 메시지 지시문 이름, 프로세서 이름 및 지시문의 줄 번호를 제공 합니다.설정의 processor 지시문 프로세서의 이름으로 지시문의 특성입니다.
' {0} '이 (가) '\ {1 ' 지시문에 대 한 필수 매개 변수를 찾을 수 없습니다. 지시문은 무시 됩니다.시스템이 필요한 지시문 매개 변수를 제공 하지 않는 경우 발생 합니다. 메시지는 누락 된 매개 변수 이름, 지시문 이름 및 줄 번호를 제공합니다.누락 된 매개 변수를 제공 합니다.
이름이 ' {0} '이 (가) 프로세서 '{1 }' 인 지시문을 지원 하지 않습니다. 지시문은 무시 됩니다.지시문 프로세서 지시문을 지원 하지 않을 때 발생 합니다. 메시지는 지시문 프로세서의 이름과 함께 잘못 된 지시문의 이름, 줄 번호를 제공 합니다.지시문의 이름을 수정 합니다.
파일 ' {'이 (가)에 대 한 include 지시문에서는 무한 루프가 발생 합니다.순환 지시문을 포함 하는 경우 표시 지정 (예를 들어: 파일 B, A 라는 파일이 포함 된 포함 파일 A).순환 지정 하지 않으면 지시문을 포함 합니다.
변환을 실행하는 중:모든 오류 또는 경고 변환을 실행 하는 동안 생성 되는이 문자열 앞에 추가 합니다.해당 사항 없음.
블록 내에서 예기치 않은 시작 또는 끝 태그를 찾았습니다. 시작 또는 끝 태그를 잘못 입력 되지 않은 및 서식 파일 중첩된 된 블록이 없는지 확인 합니다.예기치 않은 경우에 표시 < # 또는 #>. 즉, < # 닫혀 있지 다른 열린 태그 보유 하 신 # 후 > 있다면 하기 전에 열린 태그 없음 닫히지 않은 경우. 메시지에서 일치 하지 않는 태그의 줄 번호를 제공 합니다.일치 하지 않는 시작 또는 끝 태그를 제거 하거나 이스케이프 문자를 사용 합니다.
지시문의 형식이 잘못 지정 되었습니다. 지시문은 무시 됩니다. 형식으로 지시문을 지정 하십시오. <#@ name [parametername="parametervalue"]* #>올바른 형식으로 지시문을 지정 하지 않으면 파서에 의해 표시 됩니다. 메시지는 잘못 된 지시문의 줄 번호를 제공 합니다.양식에서 모든 지시문은 반드시 <#@ name [parametername="parametervalue"]* #>합니다. 자세한 내용은 참조 T4 텍스트 템플릿 지시문합니다.
지시문 프로세서를 등록된 하 고 있습니다. '{1 }'에 대 한 어셈블리 ' {0} '이 (가) 로드 하지 못했습니다.

{2}
호스트에서 지시문 프로세서를 로드할 수 없을 때 발생 합니다. 메시지는 지시문 프로세서의 이름과 지시문 프로세서에 대해 제공 하는 어셈블리를 식별 합니다.지시문 프로세서를 올바르게 등록 하 고 있으면 새 어셈블리 있어야 합니다.
지시문 프로세서를 등록된 하 고 있습니다. '{2 }'에 대 한 '{1 }' 어셈블리에서 형식 ' {'이 (가)을 찾지 못했습니다.

{3}
해당 어셈블리에서에서 지시문 프로세서 종류를 로드할 수 없을 때 발생 합니다. 메시지 유형, 어셈블리 및 지시문 프로세서의 이름을 제공 합니다.Vshost는 레지스트리에서 지시문 프로세서 정보를 (이름, 어셈블리 및 형식)를 찾습니다. 어셈블리에 해당 형식이 존재 하는지 고 지시문 프로세서를 올바르게 등록 되어 있어야 합니다.
'{0}' 어셈블리를 로드하는 동안 문제가 발생했습니다.어셈블리를 로드 하는 데 문제가 있을 때 발생 합니다. 메시지에는 어셈블리의 이름을 제공 합니다.에 로드 되는 어셈블리를 지정할 수 <@#assembly#> 지시문 및 지시문 프로세서. 이 문자열 다음에 나오는 오류 메시지는 어셈블리 로드 실패 한 이유에 대 더 많은 데이터를 제공 해야 합니다.
만들고 지시문 '{1 }'에 대 한 프로세서를 초기화 하는 중 문제가 발생 했습니다. {0} 프로세서의 유형이입니다. 지시문은 무시 됩니다.시스템을 만들거나 수 없습니다 지시문 프로세서를 초기화할 때 발생 합니다. 메시지는 지시문의 이름, 줄 번호 및 프로세서의 유형을 제공합니다.올바른 지시문 프로세서를 사용 하 고 지시문 프로세서에 공용 기본 생성자가 있어야 합니다. 지시문 프로세서의 initialize () 메서드가 실패 한 이유를 알아보려면 디버그 옵션을 사용 합니다. 자세한 내용은 참조 텍스트 템플릿 문제 해결합니다.
' {0} '이 (가) 지시문을 처리 하는 동안 예외가 발생 했습니다.지시문 프로세서 지시문을 처리 하는 경우 예외를 throw 하는 경우 발생 합니다.지시문 프로세서에 매개 변수가 올바른지 해야 합니다.
호스트에서 어셈블리 참조 ' {0} '이 (가) 확인 하는 동안 예외가 발생 했습니다.호스트 어셈블리 참조를 확인 하려고 할 때 예외를 throw 할 때 발생 합니다. 어셈블리를 제공 하는 메시지 문자열을 참조 합니다.어셈블리에서 참조는 <@#assembly#> 지시문 또는 지시문 프로세서. 어셈블리 매개 변수에 제공 된 'name' 매개 변수가 정확한 지 확인 해야 합니다.
지시문 {2 }에 대 한 ' {0} '이 (가) 지원 되지 않는 {1 } 값을 지정 하려고 합니다.RequiresProvidesDirectiveProcessor (모두에서는 생성 된 지시문 프로세서에서 파생)를 제공 하는 경우는 지원 되지 않는 필요 하거나 인수를 제공 합니다.이름에서 name = 'value' 쌍에 제공 된 반드시는 요구 되 고 매개 변수가 올바른지 합니다.
표시: