Я пишу сборку, чтобы упростить большую часть моего генерации типа 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()
), и скомпилировал его в сборку. Теперь я могу использовать служебные классы платформы сущностей в моей сборке.