Зачем использовать ttinclude вместо скомпилированных сборок? - PullRequest
5 голосов
/ 25 января 2012

Я пишу сборку, чтобы упростить большую часть моего генерации типа POCO. У меня есть одна сборка ядра, которую включают в себя несколько файлов tt и которые используют для генерации кода.

Причина, по которой я это сделал, заключается в том, что независимо от того, какое расширение я пробую (Devart T4, Tangible-T4 или Visual T4), ни одно из них не так хорошо, как intellisense и поддержка, предоставляемые редактором Visual Studio C #, поэтому написание кода в чистый C # значительно улучшает опыт.

Самая большая проблема, с которой я сталкиваюсь, заключается в том, что вспомогательные классы структуры сущностей (например, Accessibility, CodeGenerationTools, MetadataTools и т. Д.) Определены внутри файла ttinclude, а не сборки; В настоящее время мне приходится переписывать множество функций, которые предоставляют эти классы, чтобы их можно было использовать из сборки.

У меня такой вопрос: почему команда управления структурой сущностей решила использовать файл ttinclude, а не некоторые скомпилированные сборки? Использование подхода сборок выглядит так, как будто его было бы гораздо удобнее использовать в более сложных условиях и все равно не повлияло бы на генерацию кода T4 (поскольку вместо использования <#@ include #> это было бы <#@ assembly #>).

Мне интересно, каков наилучший подход к решению этой проблемы, я подумал о том, чтобы запустить от EF.Utility.CS.ttinclude до TextTransform.exe, а затем взять сгенерированный C # и скомпилировать его, будет ли это целесообразно?

Спасибо, Люк

Обновление

В настоящее время я добавил EF.Utility.CS.ttinclude в свой проект, установив пользовательский инструмент в файл TextTemplatingFilePreprocessor. Это сгенерирует код, содержащий классы. Затем я скопировал этот файл cs, удалил класс, отвечающий за запись вывода (он имеет метод TransformText()), и скомпилировал его в сборку. Теперь я могу использовать служебные классы платформы сущностей в моей сборке.

1 Ответ

2 голосов
/ 25 января 2012

Причина использования ttinclude вместо сборки аналогична использованию T4 вместо пользовательского инструмента для генерации классов (что вы на самом деле делаете и чем ранее пользовался большинство дизайнеров).Т4 и ttinclude могут быть изменены.Вы можете скопировать ttinclude и создать небольшое изменение и включить его в основной T4 для каждого проекта.

Кстати.Знаете ли вы, что существуют десятки тысяч программистов, которые могут писать код без всякой интеллигенции;) Хуже поддержка интеллисенса не является причиной для отказа от использования шаблонов T4.

...