Как опубликовать этот генератор исходного кода 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.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. И мой первый исходный генератор. Кто-нибудь может посоветовать?