Как остановить выполнение T4 каждый раз, когда я переключаюсь на другую вкладку? - PullRequest
14 голосов
/ 27 октября 2010

Когда я редактирую T4, скрипт выполняется каждый раз, когда я переключаюсь на другой файл.Это нормально для простых простых сценариев, но некоторые сценарии требуют много времени для выполнения.Есть ли способ отключить это поведение?Я хочу, чтобы скрипт запускался только при сохранении файла T4 или при выборе вручную «Run Custom Tool» из меню.

Ответы [ 5 ]

12 голосов
/ 19 октября 2011

У меня была точно такая же проблема. Я следовал инструкциям в этой статье http://msdn.microsoft.com/en-us/library/ee789839.aspx о разделении шаблонов в другой проект и совместном использовании выходных файлов.

В нем подробно описано, как отключить инструмент TextTemplatingFileGenerator , присоединенный к шаблону, щелкнув правой кнопкой мыши шаблон и очистив свойство CustomTool . Это останавливает генерирование кода шаблона при сохранении ... но он все еще работает при переключении вкладок!

Я думаю, что единственный способ обойти это - переместить весь код вашего шаблона в новый файл с другим суффиксом (например, ttinclude или t4 или что-то в этом роде), а затем включить этот файл в ваш фактический файл шаблона T4, используя include директивы. Таким образом, вам никогда не потребуется открывать этот файл для редактирования шаблона, чтобы он не запустился случайно.

Так в одном файле с именем MyTemplate.tt:

<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="Include\MyTemplateCodeBehind.t4" #>
<#@ output extension=".vb"#>
<# ' Nothing to see here! #>

В то время как в другом файле с именем MyTemplateCodeBehind.t4:

<#@ template language="VB" debug="false" hostspecific="true"#>
<#
   For Each something In somecollection
#>
   <#= something.PrintMyCode() #>
<#
   Next

#>
6 голосов
/ 28 октября 2010

T4 подключен к механизму пользовательского инструмента ( IVsSingleFileGenerator ) в системах проектов C # / VB, который позволяет запускать при сохранении, запускать пользовательское меню инструментов, а также поведение переключения по вкладкам - все по цене реализации простого интерфейса.

К сожалению, это означает, что T4 также практически не контролирует такое поведение, которое является стандартом для пользовательских инструментов.

Альтернативой может быть использование поддержки T4 MsBuild в SDK моделирования и визуализации VS для выполнения T4 во время сборки, а затем отключение пользовательского инструмента. Я спрошу у моего коллеги, который создал поддержку msbuild, использует ли он специальный инструмент для определения набора шаблонов или нет, и отправлю сообщение обратно в ветку.

3 голосов
/ 05 июня 2016

То, что я делаю (возможно, плохой метод), пишет в начале файла tt строку исключения, например:

<# throw new Exception(); #>

Поскольку я выбрасываю исключение, процесс останавливается, и когда я заканчиваю всю работу, мне просто нужно удалить эту строку. :)

2 голосов
/ 15 июля 2014

Попробуйте сразу после директив компиляции добавить метод возврата к выходу

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
 output extension="Repository.cs"#><#
return string.Empty;     //<-- add this line!!! 

...

0 голосов
/ 27 октября 2010

Шаблоны T4 выполняются при сохранении файла.Если у вас есть настройки VS для автоматического сохранения при переходе от файла, который может объяснить поведениеПросмотрите конфигурацию VS, чтобы определить, сохраняет ли VS файл, когда вы уходите.

...