Nano Hash - криптовалюты, майнинг, программирование

Как мы можем заменить T4 на Roslyn, когда нам нужно сгенерировать артефакты вывода шаблона

У нас есть несколько шаблонов, написанных с использованием T4 и реальной библиотеки для создания нескольких файлов.

Один из примеров этого выглядит следующим образом:

Ряд объектов Entity в библиотеке C#, наследуемых от BaseEntity и атрибутированных атрибутом RequiresAudit.

Эти объекты находятся и анализируются в шаблоне T4 с помощью вышеупомянутого наследования BaseEntity и атрибуции RequiresAudit.

После анализа T4 создает 3 триггерных файла SQL, которые применяются в устаревшем инструменте командой БД, и файл документации в формате JSON.

Поэтому мы требуем, чтобы T4 создал ряд артефактов из запуска шаблона — 3 файла Entity.SQL и файл docs.json.

Весь наш новый код на стороне .NET будет перенесен в .NET 5, и это единственный крупный шаг, который наши менеджеры готовы предпринять на данном этапе.

Вопрос...

Как мы можем использовать Roslyn Analyzer или Generator для выполнения точно такой же работы? Мы должны иметь сгенерированные файлы в нашем проекте. Как мы этого достигаем? Кто-нибудь может привести хороший пример? Может ли Roslyn включать файлы в проект в качестве встроенного ресурса, если да, то как?

Мы действительно хотим выучить Roslyn, но мы также боимся, что можем напрасно тратить усилия.

Поддержка T4, похоже, отсутствует в предварительной версии VS2019 (во всяком случае, при использовании .net 5), и я также обеспокоен тем, что движение в области технологий в любом случае тяготеет к миру Roslyn, и что T4 может приближаться к концу жизни.

Все документы, которые я читал о Roslyn Code Generators, похоже, не оставляют после себя никаких файлов и просто компилируют набор функций в сборку без каких-либо следов исходных файлов кода. Я просто не могу найти очевидный способ перейти от T4 к Roslyn так же, как работает t4.

Мне не нужно, почему ты так поступаешь? Комментарии. Мы не можем сильно измениться. Просто хороший дружественный способ (пример) решить проблему без перезаписи различных точек соприкосновения, которые у нас есть в нашей устаревшей системе.


Ответы:


1

Если я внимательно читаю ваш сценарий, ваши сгенерированные файлы - это SQL или JSON; прямо сейчас предполагается, что любой сгенерированный файл, сгенерированный генератором исходного кода, является файлом C# и неявно включается в компиляцию. У нас нет поддержки (пока) просто для записи других файлов в вашем случае. Начиная с 16.8 Preview 4 есть свойство, которое теперь можно установить, чтобы файлы C# также записывались в каталог как часть фактического шага компиляции, но опять же, это по-прежнему только файлы C#.

Это абсолютно то, о чем мы думаем (команда разработчиков генератора исходного кода буквально провела собрание на прошлой неделе, начав думать об этом случае), но мы еще не полностью привержены сценарию и у нас нет графика, когда мы могли бы выпустить что-нибудь.

20.10.2020
  • Привет Джейсон. Спасибо за информацию. Я уверен, что есть большое количество команд, которые столкнулись с этим сценарием и пошли по пути сгенерированного артефакта по самой природе того, что сделал T4. В нашей команде это не только SQL и JSON, другие T4 делают много другого поколения. Конечно, кое-что из того, что мы делаем, можно было бы скомпилировать в класс, но это не относится ко всему. Очень рад, что у вас есть это на радаре, по крайней мере, это дает нам некоторую надежду, что Roslyn проложит путь вперед, очень надеюсь, что файловые артефакты скоро появятся. Мы будем следить. Мы проводим наше исследование VS Preview. 20.10.2020
  • Начиная с 16.8 Preview 4 есть свойство, которое теперь можно установить, чтобы файлы C# также записывались в каталог как часть фактического шага компиляции, но опять же, это по-прежнему только файлы C#. Что такое собственность? У вас есть URL-адрес примерного проекта? 20.10.2020
  • github.com/dotnet/roslyn/pull/47047 был пиарщиком, который его реализовал. Я не уверен, что у нас есть пример, но вы можете установить для EmitCompilerGeneratedFiles значение true, чтобы включить его, и установить CompilerGeneratedFilesOutputPath, если вы хотите изменить путь, на который он устанавливается. 20.10.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..