Пошаговое руководство. Отладка текстового шаблона, обращающегося к модели
При изменении или добавлении текстовых шаблонов в решении для конкретного домена могут возникать ошибки при преобразовании шаблона в исходный код или при компиляции созданного кода. В следующем пошаговом руководстве показано, как выполнить отладку текстового шаблона.
Примечание.
Дополнительные сведения о текстовых шаблонах в целом см. в разделе "Создание кода" и "Текстовые шаблоны T4". Дополнительные сведения об отладке текстовых шаблонов см. в пошаговом руководстве по отладке текстового шаблона.
Создание решения для конкретного домена
В этой процедуре вы создадите решение для конкретного домена, которое имеет следующие характеристики:
Имя: ОтладкаTestLanguage
Шаблон решения: минимальный язык
Расширение файла: DDD
Название компании: Fabrikam
Дополнительные сведения о создании решения для конкретного домена см. в статье "Практическое руководство. Создание решения для конкретного домена".
Создание текстового шаблона
Добавьте в решение текстовый шаблон.
Создание текстового шаблона
Создайте решение и запустите его в отладчике. (В Меню "Сборка ", выберите пункт "Перестроить решение", а затем в меню "Отладка " нажмите кнопку "Начать отладку".) Новый экземпляр Visual Studio открывает проект отладки.
Добавьте текстовый файл с именем
DebugTest.tt
в проект отладки.Убедитесь, что для свойства пользовательского инструмента DebugTest.tt задано
TextTemplatingFileGenerator
значение .
Директивы отладки, обращающиеся к модели из текстового шаблона
Прежде чем получить доступ к модели из инструкций и выражений в текстовом шаблоне, необходимо сначала вызвать созданный обработчик директив. Вызов созданного обработчика директив делает классы в модели доступными для текстового кода шаблона в качестве свойств. Дополнительные сведения см. в разделе "Доступ к моделям" из текстовых шаблонов.
В следующих процедурах вы отладите неверное имя директивы и неправильное имя свойства.
Отладка неправильного имени директивы
Замените код в 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 #> <# } #>
В Обозреватель решений щелкните правой кнопкой мыши DebugTest.tt и нажмите кнопку "Запустить настраиваемое средство".
В окне списка ошибок отображается следующая ошибка:
Обработчик с именем "DebuggingTestLanguageDirectiveProcessor" не поддерживает директиву modelRoot. Преобразование не будет выполняться.
В этом случае вызов директивы содержит неверное имя директивы. Вы указали
modelRoot
в качестве имени директивы, но правильное имя директивыDebuggingTestLanguage
.Дважды щелкните ошибку в окне списка ошибок, чтобы перейти к коду.
Чтобы исправить код, измените имя
DebuggingTestLanguage
директивы на .Выделено изменение.
В Обозреватель решений щелкните правой кнопкой мыши DebugTest.tt и нажмите кнопку "Запустить настраиваемое средство".
Теперь система преобразует текстовый шаблон и создает соответствующий выходной файл. В окне списка ошибок не будут отображаться ошибки.
Отладка неправильного имени свойства
Замените код в 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 #> <# } #>
В Обозреватель решений щелкните правой кнопкой мыши DebugTest.tt и нажмите кнопку "Запустить настраиваемое средство".
Откроется окно списка ошибок и отображается одна из следующих ошибок:
C#
Преобразование компиляции: GUID> Microsoft.VisualStudio.TextTemplating<. GeneratedTextTransformation' не содержит определения для ExampleModel
(Visual Basic)
Преобразование компиляции: ExampleModel не является членом GUID> Microsoft.VisualStudio.TextTemplating<. GeneratedTextTransformation'.
В этом случае код текстового шаблона содержит неверное имя свойства. Вы указали
ExampleModel
в качестве имени свойства, но правильное имяLibraryModel
свойства . В параметре предоставляется правильное имя свойства, как показано в следующем коде:<#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
Дважды щелкните ошибку в окне списка ошибок, чтобы перейти к коду.
Чтобы исправить код, измените имя
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 #> <# } #>
В Обозреватель решений щелкните правой кнопкой мыши DebugTest.tt и нажмите кнопку "Запустить настраиваемое средство".
Теперь система преобразует текстовый шаблон и создает соответствующий выходной файл. В окне списка ошибок не будут отображаться ошибки.