Генератор шаблонов T4 переделан для Net Core - PullRequest
0 голосов
/ 03 августа 2020

Я работаю над генератором шаблонов T4 для Visual Studio, который поддерживает базовую среду выполнения net. Следующие требования:

  1. шаблоны T4 с использованием функциональных сборок netstandard 2.0 или netstandard 2.1.
  2. Поддержка компилятора языка последней версии.
  3. Отладка шаблонов T4 в Visual Studio.
  4. создание шаблонов T4 в Visual Studio с помощью настраиваемого инструмента

При этом, VS 2019 предоставляет из коробки:

  1. Механизм шаблонов T4, работающий на среда выполнения Framework.
  2. Roslyn в компиляторе процесса ограничена C# 5.0.
  3. Visual Studio использует удаленные службы для выполнения генерации шаблона в хост-процессе T4, а также для подключения и отладки шаблон.
  4. функциональные сборки netstandard 2.x не поддерживаются, по крайней мере, мне так и не удалось заставить их работать.

Некоторые из соображений, которые я должен учитывать, следующие:

  1. netcore и net 5, не поддерживают AppDomain.
  2. Текстовое преобразование T4, скомпилированное с помощью rosyln, не может обрабатываться во фреймворке, не загружается System.Private.CoreLib. для этого требуется, чтобы хост-процесс существовал не только для генерации файлов кода, но и для их отладки.
  3. Это также означает, что T4HostProcess использует именованные каналы для связи с Visual Studio. Является ли хост-процесс сервером именованного канала или клиентом. Я хочу назвать сервер, но не уверен, поэтому я публикую это при переполнении стека.
  4. С последним утверждением я почти уверен, что мне нужно найти способ облегчить перекрестный домен связь с использованием именованных каналов между базовым процессом. net и процессом фреймворка (Visual Studio). Удаленные службы не подходят, потому что они созданы для платформы и не будут работать для. net core.

Шаги, предпринятые для достижения решения:

  1. с использованием механизм шаблонов Mono T4 для компиляции сборки T4 Transform, используя среду выполнения netcore Roslyn.
  2. Мне удалось выполнить sh следующее: пользовательский инструмент, скомпилировать сборку преобразования T4.

Я хотел бы услышать любые предложения о том, как я могу заставить это работать. Я в траве с этим, и некоторые из них выглядят просто устрашающе.

...