Я работаю над генератором шаблонов T4 для Visual Studio, который поддерживает базовую среду выполнения net. Следующие требования:
- шаблоны T4 с использованием функциональных сборок netstandard 2.0 или netstandard 2.1.
- Поддержка компилятора языка последней версии.
- Отладка шаблонов T4 в Visual Studio.
- создание шаблонов T4 в Visual Studio с помощью настраиваемого инструмента
При этом, VS 2019 предоставляет из коробки:
- Механизм шаблонов T4, работающий на среда выполнения Framework.
- Roslyn в компиляторе процесса ограничена C# 5.0.
- Visual Studio использует удаленные службы для выполнения генерации шаблона в хост-процессе T4, а также для подключения и отладки шаблон.
- функциональные сборки netstandard 2.x не поддерживаются, по крайней мере, мне так и не удалось заставить их работать.
Некоторые из соображений, которые я должен учитывать, следующие:
- netcore и net 5, не поддерживают AppDomain.
- Текстовое преобразование T4, скомпилированное с помощью rosyln, не может обрабатываться во фреймворке, не загружается System.Private.CoreLib. для этого требуется, чтобы хост-процесс существовал не только для генерации файлов кода, но и для их отладки.
- Это также означает, что T4HostProcess использует именованные каналы для связи с Visual Studio. Является ли хост-процесс сервером именованного канала или клиентом. Я хочу назвать сервер, но не уверен, поэтому я публикую это при переполнении стека.
- С последним утверждением я почти уверен, что мне нужно найти способ облегчить перекрестный домен связь с использованием именованных каналов между базовым процессом. net и процессом фреймворка (Visual Studio). Удаленные службы не подходят, потому что они созданы для платформы и не будут работать для. net core.
Шаги, предпринятые для достижения решения:
- с использованием механизм шаблонов Mono T4 для компиляции сборки T4 Transform, используя среду выполнения netcore Roslyn.
- Мне удалось выполнить sh следующее: пользовательский инструмент, скомпилировать сборку преобразования T4.
Я хотел бы услышать любые предложения о том, как я могу заставить это работать. Я в траве с этим, и некоторые из них выглядят просто устрашающе.