Как использовать T4 и Visual Studio для расширения частичного класса
-
22-08-2019 - |
Вопрос
Я хотел использовать T4 для генерации свойств для частичного класса.Я столкнулся с проблемой конфигурации, из-за которой мой файл .TT находится в том же проекте, что и файл класса, который я хочу расширить.Так что, если мне нужно включить сборку в .TT-файл, он будет заблокирован.Я попытался выполнить командную строку в предварительной сборке, но проблема в том, что VS всегда хочет перекомпилировать файл .TT с проектом.
Единственное решение, которое я могу придумать, - это переименовать файлы .tt, скажем , в .t4, а затем использовать команду предварительной сборки с TextTransform -out для создания файла .cs в каталоге проекта.
Кто-нибудь может придумать более чистый способ сделать это?
Решение
Предполагая, что блокировка вызвана тем, что ваш шаблон использует отражение для чтения метаданных частичного класса, который вам нужно расширить, вы могли бы решить проблему блокировки, если используете CodeModel.Этот API предоставляется Visual Studio и позволяет вам получать метаданные непосредственно из исходного файла, без необходимости компилировать частичный класс или загружать скомпилированную библиотеку DLL.Вот пример генератора кода T4, который использует этот подход: http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration