Во всех примерах и документации, которые я вижу, генераторы исходного кода находятся в собственной сборке. Это требуется? У меня есть библиотека, которая в настоящее время использует отражение и скомпилированные лямбда-выражения. Я собираюсь написать генератор, который будет писать классы, поэтому он не нужен во время выполнения. Генератору потребуется ссылка на библиотеку. Есть ли причина, по которой генератор не может или не должен находиться в самой библиотеке?
Выглядит основанным на мнении... Обратите внимание, что большинству людей будет сложно понять рекурсивный характер такого подхода - вы можете включить пояснения, ссылающиеся на "компиляторы для самостоятельного создания ботов" и примеры использования :).
@GuruStron Потребительский проект будет использовать библиотеку/генератор, так что это будет компиляция. Библиотека/генератор будет в пакете NuGet.
Я бы порекомендовал это, потому что вы можете столкнуться с проблемами зависимости, если не будете осторожны. Генератор исходного кода должен быть нацелен на netstandard2.0, так как мы должны загружать генератор в разные части Visual Studio для Windows, некоторые из которых используют .NET Core, а некоторые используют .NET Framework (не говоря уже о таких вещах, как VS Code или VS для Mac). !). Однако ваша библиотека может захотеть иметь другие цели, либо с точки зрения фреймворков, либо с точки зрения зависимостей времени выполнения.
Мой крайний пример здесь — библиотека, которая работает только в Linux, но вы делаете свою разработку в Windows, а затем развертываете ее на устройстве Linux для тестирования. В этом случае ваш генератор работает на компьютере с Windows, а ваша библиотека — на компьютере с Linux. Вы, конечно, можете сделать это с помощью одной сборки, но их разделение делает разницу между временем разработки и временем выполнения более четкой.
Если у вашего генератора есть куча зависимостей, это также может привести к ошибкам, пытаясь заставить их загрузиться (вы должны быть осторожны с упаковкой), когда этого лучше всего избегать.
Итак, краткий ответ: это не обязательно, но позволяет избежать кучу потенциальных неочевидных проблем и ошибок.
Есть по крайней мере одна причина - изолировать зависимости времени сборки (чтобы они не включались в вывод). Также еще одна причина - для запуска генератора исходников нужно собрать проект, а для сборки проекта нужно будет запустить генератор исходников... =)