Как использовать T4 и Visual Studio для расширения частичного класса

StackOverflow https://stackoverflow.com/questions/376428

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top