Как отобразить код (не выводимый), который генерирует .Net T4? - PullRequest
12 голосов
/ 14 июля 2011

У нас есть набор шаблонов T4, которые мы только что перенесли в VS 2010, и они компилируются, но больше не работают так же.

Чтобы увидеть, что на самом деле происходит под капотом , было бы полезно увидеть временные файлы cs, которые генерирует T4, чтобы произвести фактическое преобразование T4.

Ответы [ 3 ]

7 голосов
/ 15 июля 2011

Поскольку вы сейчас используете Visual Studio 2010, вы также можете временно изменить пользовательский инструмент в шаблоне с TextTemplatingFileGenerator на TextTemplatingFilePreprocessor.

Это приведет к тому, что базовый код будет добавлен непосредственно в ваш проект вместо обычноговывод шаблона.

5 голосов
/ 14 июля 2011

Если вы установите

<#@ template  debug="true"#>

тогда сгенерированный код останется в вашей временной директории. В моей системе Windows 7 это C:\Users\John Saunders\AppData\Local\Temp.

0 голосов
/ 14 июля 2011

Я не знаю, как делать именно то, что вы хотите, однако я знаю, как пройти через код t4 в visual studio. Вам нужно запустить второй экземпляр Visual Studio и прикрепить его к первому экземпляру, используя Debug-> Attach для обработки ... (Прикрепить его к себе, странно, я знаю). Это позволит вам установить контрольные точки в файле T4 во втором экземпляре, и он остановится и позволит вам пройти через него и посмотреть, что происходит.

Edit:

Вам нужно выполнить преобразование t4 в visual studio вместо инструмента командной строки, чтобы это работало. Поместите свой файл .tt в свой проект и установите для «Custom Tool» в его свойствах значение «TextTemplatingFileGenerator». Он будет генерировать файлы каждый раз, когда вы указываете файл для сохранения или когда вы щелкаете правой кнопкой мыши и говорите «Запустить пользовательский инструмент» для файла. См. эту статью MSDN для получения дополнительной информации.

Я также рекомендую получить ощутимый редактор T4 бесплатную версию, которая добавляет подсветку кода и intellisense примерно к 90% случаев, в которых я нуждался для него (он добавляет его только для функций в Core.dll для .NET Framework). Платная версия добавит intellisense ко всем прикрепленным сборкам.

Edit2: Если вы ДЕЙСТВИТЕЛЬНО хотите использовать временные файлы CS, которые он использует, вы можете увидеть, какие файлы CS из временной папки загружены в отладчик (я точно не помню, где).

...