Генератор исходного кода C# не может быть создан

#c# #sourcegenerators #csharp-source-generator

Вопрос:

Я сам, а также мои коллеги начали сталкиваться с этой проблемой где-то в последние несколько недель:

Сборка НЕ УДАЛАСЬ

CSC : предупреждение CS8032: Экземпляр анализатора My.Company.Генераторы.ReportingV2Генератор не может быть создан из /Пользователи/работа/dev/git/модель отчетности/src/Моя.Компания.Генераторы/bin/Отладка/netstandard2.1/Моя компания.Generators.dll : Не удалось загрузить файл или сборку » Microsoft.Анализ кода, Версия=3.10.0.0, Культура=нейтральная, PublicKeyToken=31bf3856ad364e35′. Система не может найти указанный файл.. [/Пользователи/работа/разработка/git/модель отчетности/src/Моя.Команда.Модели.ReportingV2/Моя.Команда.Модели.ReportingV2.csproj]

/Users/work/dev/git/reporting-model/src/My.Company.Api/SmokeTests/Tests/ContentAskExpertSmokeTest.cs(7,20): ошибка CS0234: Тип или имя пространства имен «Модели» не существует в пространстве имен » Мой.Команда» (у вас отсутствует ссылка на сборку?) [/Пользователи/работа/разработка/git/модель отчетности/src/My.Company.Api/My.Company.Api.csproj]
… Еще много вышеперечисленных ошибок «типа или пространства имен»

Это происходит как в macOS, так и в Windows. Он работает в Linux (как на персональной машине, так и внутри mcr.microsoft.com/dotnet/sdk:5.0 .

Буквально ни один исходный код генератора / csproj не изменился, он начался спонтанно около двух недель назад. Я также могу воспроизвести это в фиксации двухмесячной давности, так что, похоже, что-то могло измениться внешне в пакетах?

Комментарии:

1. «Не удалось загрузить файл или сборку» Microsoft. Кодовый анализ»… Система не может найти указанный файл. »

2. Да, но это так, на 100%. Как я уже сказал, я проверил старую фиксацию двухмесячной давности, и возникла та же проблема.

3. Это dotnet restore тоже работает, и я вижу эту зависимость

4. Что-то обновило пакет NuGet для анализа кэшированного кода до другой версии?

5. Кажется маловероятным, учитывая, что это происходит на 5 разных машинах (Mac и Windows), но никогда не на Linux, и все они извлекаются из одной и той же искусственной jfrog

Ответ №1:

Я нашел решение для этого, обратившись непосредственно в Microsoft.

Ошибка в случае сбоя заключается в том, что генератор зависит от Microsoft.Кодовый анализ.dll версии 3.10 и 3.10 поставляются только в версии 5.0.300. Похоже, что в вашем случае успеха используется SDK 5.0.300, но в случае сбоя используется 5.0.204.

У вас есть два варианта исправить это:

Если вы не используете какие-либо функции, представленные в 3.10 для генераторов исходных текстов, вы можете снизить цену.Пакет CodeAnalysis nuget нацелен на 3.9. Убедитесь, что все сборки используют по крайней мере версию SDK 5.0.300

https://github.com/dotnet/roslyn/issues/54710