Как создать пакет, который, скорее всего, не вызовет проблем с версиями? - PullRequest
1 голос
/ 06 июня 2019

Я создал пакет NuGet с пустым регистратором, и мой пакет зависит от Microsoft.Extensions.Logging.Abstractions .

Моя PackageReference строка и мояdependency в файле .nuspec установлены на 1.0.0 без специального синтаксиса, который, как я понимаю, означает >=.

Мой пустой регистратор отлично работает с этой версией, и яЯ подумал, что использование самой низкой рабочей версии библиотеки абстракций сделает мой пакет более легким для использования приложениями, которые, вероятно, будут иметь большие версии.

Однако, когда я ссылаюсь на свой пакет из тестового проекта xUnit, у меня естькрасная ошибка компилятора CS1705.

Мой тестовый проект ссылается на два пакета:

  1. Проект, который он тестирует, представляет собой сайт ASP.NET Core Razor Pages, который, в свою очередь, ссылается натот же пакет абстракций журналирования, который включен в Microsoft.AspNetCore.App 2.2.0 metapackage.

  2. Мой пустой пакет регистратора, который, в свою очередь, ссылается наРегистрация абстракций 1.0.0.0, как я уже описал.

Ошибка компилятора из тестового проекта говорит:

Сборка (Razor Pages proj) использует (Абстракции 2.2.0.0) с версией выше, чем указанная сборка (Abstractions) с идентификатором (Abstractions 1.0.0.0).

Мой пакет может использовать более высокую версию, так что мне не хватает?


Редактировать

Вот диаграмма высокой точности;)

Dependency graph

  • T is«xUnit Proj».
  • W - тестируемый «Сайт Proj».
  • E - пустой пакет логгера (Evoq.Instrumentation on nuget.org)
  • A -метапакет Microsoft.AspNetCore.App 2.2.0
  • L - это Microsoft.Extensions.Logging.Abstractions

Существует правило ближайших побед, которое, я думаю, означает, что зависимость от T до Lчерез E победил бы, и версия 2.0.0 использовалась бы, но я ожидал бы, что предупреждение о понижении пакета не серьезная ошибка компилятора.

Ближайшие победы: https://docs.microsoft.com/en-us/nuget/consume-packages/dependency-resolution#nearest-wins

Редактировать 2

Мне только что пришло в голову, что T> W является ссылкой на проект.Так что, возможно, это короткое замыкание резолюции NuGet.Я добавлю ссылку из T в A напрямую и посмотрю, решит ли это это.

1 Ответ

0 голосов
/ 07 июня 2019

Я забыл, T> W - ссылка на проект.Поэтому я думаю, что это было коротким замыканием разрешения NuGet, которое я ожидал получить.

Я добавил ссылку непосредственно от T к A, и это решило ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...