Microsoft.AspNetCore.App - Управление версиями / Следует ли указывать на это в библиотеках классов, отличных от ASP.NET? - PullRequest
7 голосов
/ 14 марта 2019

Я пытаюсь найти правильный способ использования метапакета Microsoft.AspNetCore.App.

Visual Studio при создании отчетов, для которых не следует указывать версию для Microsoft.AspNetCore.Appmeta package.

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.1" />

Поэтому я заменяю вышеприведенное на:

<PackageReference Include="Microsoft.AspNetCore.App" />

Следующая проблема заключается в том, что любые проекты или пакеты библиотеки классов, от которых зависит мой проект, содержат версионные ссылки на пакетыкоторые также включены в метапакет Microsoft.AspNetCore.App, нарушают сборку из-за конфликта версий.

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.1" />

Поэтому я также удаляю версии по этим ссылкам:

<PackageReference Include="Microsoft.Extensions.Configuration" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json"  />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" />

Теперь, когда я запускаю dotnet restore, я вижу предупреждение:

<Project> does not provide an inclusive lower bound for dependency 
Microsoft.Extensions.Configuration. An approximate best match of 
Microsoft.Extensions.Configuration 1.0.0 was resolved.

Так что теперь приложение собирается, но разрешается старая и, возможно, устаревшая версия пакета.

Кажется,как небольшая нагрузка на поддержание версий нижнего предела для всех этих пакетов.

Кажется, что путь наименьшего сопротивления может быть просто ссылаться на пакет Microsoft.AspNetCore.App (не версионный) вместо любых пакетов, которые содержатся в метапакете.Но тогда я неявно ссылаюсь на множество ненужных вещей (150 пакетов в настоящее время).Я мог бы хотеть повторно использовать библиотеку классов в проекте, который не является веб-ориентированным, и поэтому все упомянутые пакеты выглядят как неэффективное раздувание.Кроме того, прав ли я, полагая, что более новые версии Microsoft.AspNetCore.App могут сломать мое приложение при дальнейшей сборке?

Ответы [ 2 ]

3 голосов
/ 08 апреля 2019

Я думаю, что вы, возможно, захотите соблюдать диапазоны версии NuGet и подстановочные знаки обозначения.

При обращении к зависимостям пакетов NuGet поддерживает использование интервальной нотации для указания диапазонов версий, обобщенно следующим образом:

+-----------+---------------+-------------------------------------------------------+
| Notation  | Applied rule  |                      Description                      |
+-----------+---------------+-------------------------------------------------------+
| 1.0       | x ≥ 1.0       | Minimum version, inclusive                            |
| (1.0,)    | x > 1.0       | Minimum version, exclusive                            |
| [1.0]     | x == 1.0      | Exact version match                                   |
| (,1.0]    | x ≤ 1.0       | Maximum version, inclusive                            |
| (,1.0)    | x < 1.0       | Maximum version, exclusive                            |
| [1.0,2.0] | 1.0 ≤ x ≤ 2.0 | Exact range, inclusive                                |
| (1.0,2.0) | 1.0 < x < 2.0 | Exact range, exclusive                                |
| [1.0,2.0) | 1.0 ≤ x < 2.0 | Mixed inclusive minimum and exclusive maximum version |
| (1.0)     | invalid       | invalid                                               |
+-----------+---------------+-------------------------------------------------------+

Таким образом, вместо удаления свойства Version в целом используйте диапазон или подстановочный знак, например:

Минимальная версия, включительно

<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1" />

Ссылка: Как исправить предупреждение о восстановлении dotnet NU1604, не содержит включительно нижней границы?

Требуется некоторая настройка, и я надеюсь, что Microsoft разберет все это в RTM 3.0 с помощью мастера для обновления дерева зависимостей ... Вот проект от 6 месяцев назад, он содержит ссылку на Microsoft.AspNetCORE.Mvc:

enter image description here

Вот проект, над которым я работаю, и мне пришлось явно ссылаться на определенные пакеты (чтобы получить ActionResults, мне нужно было добавить 2 конкретные ссылки.):

enter image description here

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

1 голос
/ 02 апреля 2019

Похоже, ответ в ответах.Выберите одну из этих стратегий:

  1. Не указывайте Microsoft.AspNetCore.App метапакет, а вместо этого ссылайтесь на конкретные пакеты, которые вам нужны.Лучше всего подходит для распределенных библиотек.

  2. Ссылка Microsoft.AspNetCore.App с конкретной версией, и убедитесь, что эта версия одинакова во всем решении.Это требует, чтобы вы владели всем стеком, так что это, вероятно, полезно только для монолитов со многими зависимыми проектами в одном решении.

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