Заставьте T4MVC работать с ASP.NET 5

Согласно последним комментариям в этой теме, шаблоны .tt будут теперь все-таки поддерживается в ASP.NET 5, начиная с Visual Studio Update 1.

Какое ИМХО было бы здорово, потому что после многих лет использования T4MVC я определенно не хочу возвращаться к использованию волшебные строки для имен маршрутов/представлений (подвержены ошибкам и не подходят для рефакторинга).

Однако я не могу заставить его работать с ASP.NET 5 RC и Visual Studio Professional 2015 Update 1.

Вот что я пробовал:

  1. Добавление T4MVC NuGet (3.16.5) в пустое решение ASP.NET 5: нет , CoreCLR жалуется, и в проект не добавляются файлы .tt:

Ошибка NU1002 Зависимость T4MVCExtensions 3.16.5 в проекте WebApplication1 не поддерживает платформу DNXCore, версия = v5.0.

  1. Добавьте NuGet в классическое решение ASP.NET 4.6 и вручную скопируйте T4MVC.tt, T4MVC.tt.hooks.t4 и T4MVC.tt.settings.xml в решение ASP.NET 5: Visual Studio действительно предлагает «Запустить пользовательский инструмент» в файле .tt....

введите здесь описание изображения

... но при выполнении преобразования выдается NullReferenceException:

Severity    Code    Description Project File    Line    Suppression State
Error       Running transformation: System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.VisualStudio.TextTemplating3FE65EE761BB32C4AE5AEEB1949A6FC143551E0A56C74E6B36511A416E2DE40FB92F7CB1BC6FC7A97FF5B622AE39377BBFB9463480555898ADB8DD6D286C533D.GeneratedTextTransformation.GetProjectItem(ProjectItems items, String subPath) in c:\dev\MyApp\WebApplication3\src\WebApplication3\T4MVC.tt:line 1398
   at Microsoft.VisualStudio.TextTemplating3FE65EE761BB32C4AE5AEEB1949A6FC143551E0A56C74E6B36511A416E2DE40FB92F7CB1BC6FC7A97FF5B622AE39377BBFB9463480555898ADB8DD6D286C533D.GeneratedTextTransformation.GetProjectItem(Project project, String name) in c:\dev\MyApp\WebApplication3\src\WebApplication3\T4MVC.tt:line 1378
   at Microsoft.VisualStudio.TextTemplating3FE65EE761BB32C4AE5AEEB1949A6FC143551E0A56C74E6B36511A416E2DE40FB92F7CB1BC6FC7A97FF5B622AE39377BBFB9463480555898ADB8DD6D286C533D.GeneratedTextTransformation.ProcessAreas(Project project) in c:\dev\MyApp\WebApplication3\src\WebApplication3\T4MVC.tt:line 600
   at Microsoft.VisualStudio.TextTemplating3FE65EE761BB32C4AE5AEEB1949A6FC143551E0A56C74E6B36511A416E2DE40FB92F7CB1BC6FC7A97FF5B622AE39377BBFB9463480555898ADB8DD6D286C533D.GeneratedTextTransformation.PrepareDataToRender(TextTransformation tt) in c:\dev\MyApp\WebApplication3\src\WebApplication3\T4MVC.tt:line 557
   at Microsoft.VisualStudio.TextTemplating3FE65EE761BB32C4AE5AEEB1949A6FC143551E0A56C74E6B36511A416E2DE40FB92F7CB1BC6FC7A97FF5B622AE39377BBFB9463480555898ADB8DD6D286C533D.GeneratedTextTransformation.TransformText() in c:\dev\MyApp\WebApplication3\src\WebApplication3\T4MVC.tt:line 40    WebApplication3 c:\dev\MyApp\WebApplication3\src\WebApplication3\T4MVC.tt   1398    

Любые другие предложения?

См. также этот вопрос об альтернативах T4MVC в ASP.NET 5.


person Max♦    schedule 21.12.2015    source источник
comment
Во-первых, файлы t4 классифицируются как содержимое, и nuget больше не будет импортировать их в ваш проект. То же самое для js или css. Это решает вашу первую загадку.   -  person Maxime Rouiller    schedule 21.12.2015
comment
Затем идут вещи .NET Core. Это может быть на 100 % оправдано, и чтобы он был совместим с .NET Core, вы должны явно указать при создании пакета, что вы его поддерживаете. Я не знаю, поддерживает ли это T4MVC.   -  person Maxime Rouiller    schedule 21.12.2015
comment
Наконец, Дэвид Эббо — это парень, который написал пакет. Он сотрудник Microsoft, и я постараюсь, чтобы он увидел эту ветку. :)   -  person Maxime Rouiller    schedule 21.12.2015


Ответы (2)


На данный момент T4MVC не предназначен для работы в проектах ASP.NET 5, поэтому я не удивлен, что он не работает.

Некоторое время назад был запущен отдельный проект R4MVC с использованием подхода, основанного на Roslyn. Однако это было сделано в то время, когда в ASP.NET 5 не было поддержки T4, и теперь это было пересмотрено.

Так что вполне возможно, что есть надежда запустить T4MVC, но кому-то нужно будет потратить время, чтобы увидеть, насколько он далек от работы.

Я сделал крошечный шаг и исправил нулевую ссылку, которую вы нажали (еще не выпущенную, вам нужно исправить вручную). Однако затем я попал в состояние, когда кажется, что все в порядке.

В любом случае, здесь не место для полного изучения всех проблем, но если кто-то хочет взяться за это, мы можем обсудить это на https://github.com/T4MVC/T4MVC.

person David Ebbo    schedule 21.12.2015

Как заметил Дэвид Эббо (привет!) R4MVC — давным-давно был начат побочный проект, но был остановлен из-за (в то время) критических изменений в компиляторе Roslyn.

К счастью, проект был возрожден, и R4MVC только что выпустила первую альфа-сборку, и вскоре появятся новые изменения. .

Хотя проект работает несколько иначе и не использует шаблоны t4, конечный результат тот же, и мы работаем над достижением паритета функций с T4MVC в ближайшем будущем.

person Artiom Chilaru    schedule 11.08.2017