Как опубликовать этот генератор исходного кода C# с зависимостями от Nuget?

Я создал генератор исходного кода C# и хотел бы опубликовать его в Nuget.

Но я сталкиваюсь с предупреждениями / ошибками, такими как:

  • Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below: - Add lib or ref assemblies for the netstandard2.0 target framework
  • An instance of analyzer Cosmogenesis.Generator.CosmosGenerator cannot be created from [..]\Cosmogenesis.Generator.dll : Could not load file or assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.. (или Версия = 2.0.0.0 в зависимости от того, что я пытаюсь)

Есть несколько ресурсов, объясняющих, как, но, похоже, ни один из них не работает в моем точном сценарии, а именно:

    • .NET Standard 2.1
    • Не зависит от генератора, но сгенерированный исходный код зависит от него
  • (опубликовано на Nuget как раз)
    • .NET Standard 2.0
    • Это исходный генератор

В идеале я бы хотел просто установить Cosmogenesis из Nuget, и он автоматически добавится вместе с генератором.

Использовать функциональность из пакетов NuGet <- объясняет мой сценарий (за исключением различных требований стандарта .net). .... И как побочный вопрос: почему у него есть код для проверки наличия ссылки на сборку, если он объясняет, как сделать, чтобы на нее автоматически ссылались? ....

Так или иначе...

Вот Cosmogenesis на Github

Cosmogenesis.Core публикуется без проблем.

Cosmogenesis.Generatorпубликуется с помощью этого .csproj , а также

Оно работает. Однако потребителю необходимо сослаться на ОБЕИ упаковки. Я бы хотел, чтобы они ссылались только на один пакет.

Когда я добавляю <IncludeBuildOutput>false</IncludeBuildOutput> (согласно руководству выше), при сборке я получаю это предупреждение: Some target frameworks declared...[см. выше]. Если я проигнорирую его и все равно опубликую, когда я использую пакет в проекте и создаю его, генератор не запускается, и я получаю следующее предупреждение: [см. Выше].

Когда я добавляю <PackageReference Include="Cosmogenesis.Core" Version="0.0.1" />(согласно руководству выше), я получаю сообщение об ошибке. Генератор - .NET Standard 2.0, а пакет .Core - 2.1. Ошибка: error NU1202: Package Cosmogenesis.Core 0.0.1 is not compatible with netstandard2.0 (.NETStandard,Version=v2.0). Package Cosmogenesis.Core 0.0.1 supports: netstandard2.1 (.NETStandard,Version=v2.1). Понятно.

Когда я установил для проекта генератора значение 2.1, чтобы исправить несоответствие, во время сборки не появилось никаких предупреждений, однако потребитель снова получает An instance of analyzer...ошибка. Генераторы исходного кода C# - пишите код, который пишет код - Дэвид Венгер говорит, что они должны соответствовать стандарту .NET 2.0.

Это мой первый пакет nuget. И мой первый исходный генератор. Кто-нибудь может посоветовать?

0 ответов

Другие вопросы по тегам