Поделиться через


Пошаговое руководство. Отладка текстового шаблона, обращающегося к модели

При изменении или добавлении текстовых шаблонов в решении для конкретного домена могут возникать ошибки при преобразовании шаблона в исходный код или при компиляции созданного кода. В следующем пошаговом руководстве показано, как выполнить отладку текстового шаблона.

Примечание.

Дополнительные сведения о текстовых шаблонах в целом см. в разделе "Создание кода" и "Текстовые шаблоны T4". Дополнительные сведения об отладке текстовых шаблонов см. в пошаговом руководстве по отладке текстового шаблона.

Создание решения для конкретного домена

В этой процедуре вы создадите решение для конкретного домена, которое имеет следующие характеристики:

  • Имя: ОтладкаTestLanguage

  • Шаблон решения: минимальный язык

  • Расширение файла: 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#

    Преобразование компиляции: 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" #>
    
  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 и нажмите кнопку "Запустить настраиваемое средство".

    Теперь система преобразует текстовый шаблон и создает соответствующий выходной файл. В окне списка ошибок не будут отображаться ошибки.