В обоих случаях похоже, что вы пытаетесь использовать шаблон T4 в своем проекте Visual Studio и использовать TextTemplatingFileGenerator в качестве пользовательского инструмента для генерации кода из шаблона.
1: MvcTextTemplatingHost являетсяпользовательский хост T4, который доступен только при использовании диалоговых окон добавления представления ASP.NET MVC или добавления контроллера.Он не будет доступен и не будет должным образом инициализирован при использовании пользовательского инструмента TextTemplatingFileGenerator.
2: MvcScaffolding / T4Scaffolding Стива Сандерсона использует собственный настраиваемый хост T4, поэтому у вас возникает похожая проблема.Если вы используете консоль диспетчера пакетов NuGet с вашим пользовательским шаблоном скаффолдинга T4, то он должен работать, но он не будет работать с пользовательским инструментом TextTemplatingFileGenerator.Сам класс DynamicTransform не существует.Если вы посмотрите на исходный код T4Scaffolding в CodePlex в классе InvokeScaffoldTemplateCmdlet, вы увидите, что директива Inherits = "DynamicTransform" фактически удалена и заменена ссылкой на объект динамической модели.Когда вы строите контроллер, на пользовательском хосте и объекте динамической модели настраиваются различные свойства (например, Model.ModelType) перед его передачей в шаблон T4 для обработки.
В обоих вышеупомянутых случаях использованиешаблонов T4 с TextTemplatingFileGenerator не будет работать, так как они используют собственный хост шаблонов, который должен быть инициализирован, прежде чем он может использоваться шаблонами T4.
Я думаю, что ваши варианты:
- Создайте настраиваемый шаблон ASP.NET MVC T4 и используйте инструмент ASP.NET для создания настраиваемого контроллера с помощью диалогового окна «Добавить контроллер».
- Создайте настраиваемый шаблон T4 для строительных лесов и используйте диспетчер пакетов NuGetконсоль для генерации вашего пользовательского контроллера.
- Создайте свой собственный инструмент, который инициализирует пользовательский хост, который можно использовать из вашего шаблона T4.
Вариант 2), вероятно, ваш лучший выбор, посколькуЯ считаю, что MvcScaffolding может обновить существующий код контроллера, не удаляя тон существующий код.