Как использовать T4 и Visual Studio для расширения частичного класса - PullRequest
1 голос
/ 18 декабря 2008

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

Единственное решение, которое я могу придумать, - это переименовать файлы .tt в .t4, а затем использовать команду предварительной сборки с TextTransform -out для создания файла .cs в каталоге проекта.

Кто-нибудь может придумать более чистый способ сделать это?

1 Ответ

3 голосов
/ 29 декабря 2008

Предполагая, что блокировка вызвана тем, что ваш шаблон использует Reflection для чтения метаданных того частичного класса, который вам нужно расширить, вы можете решить проблему блокировки, если будете использовать CodeModel. Этот API предоставляется Visual Studio и позволяет получать метаданные непосредственно из исходного файла без необходимости компилировать частичный класс или загружать скомпилированную DLL. Вот пример генератора кода T4, который использует этот подход: http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration

...