Понимание версии исправления ASP.NET Core. - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь понять, как механизм отката с Microsoft.AspNetCore.App должен работать вместе с другими пакетами nuget.

Насколько я понимаю, каждый раз, когда я публикую свое приложение, .netcore будет автоматически публиковать приложение в последней установленной мной исправленной версии.Это не похоже на хорошую практику для меня.Я думаю, что приложение должно быть развернуто в версии .net, для которой оно было разработано.

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

Это привело к сбою сборки со следующей ошибкой:

error NU1605: Detected package downgrade: Microsoft.EntityFrameworkCore.Design from 2.1.8 to 2.1.4. Reference the package directly from the project to select a different version.

Я явно указал, что хочу версию 2.1.4 Microsoft.EntityFrameworkCore.Design, поскольку это была последняя версия,был доступен, когда я первоначально разработал приложение.

Я чувствую, что здесь что-то упущено.Должен ли я быть уверен, что у меня всегда установлен один и тот же SDK, установленный локально, как на сервере сборки, и что все мои приложения обновляются до последней версии SDK каждый раз, когда мне нужно внести изменения?Что, если коллега захочет написать приложение .netcore, ориентированное на более новую версию платформы, чтобы они потребовали установить новый SDK на сервере сборки?Конечно, мне не нужно обновлять приложение до последней версии патча.

1 Ответ

0 голосов
/ 11 июля 2019

Вы столкнулись с проблемой, потому что, когда вы ссылаетесь на Microsoft.AspNetCore.App без версии, вы не должны ссылаться на пакеты, которые уже загружены метапакетом. Поскольку метапакет уже содержит Microsoft.EntityFrameworkCore.Design, и вы указали версию с жесткой версией, вы получили конфликт версий.

Это обычно происходит, когда у вас есть один проект с метапакетом в другом (например, тестовый проект) с указанной версией. Затем происходит то, что при сборке он определяет самую высокую версию и использует ее, но когда он попадает в тестовый проект, ему нужно будет понизить версию (из-за указанной версии), и он выдаст ошибку сборки. Рекомендуемый путь до версии 3.0 - добавить <Project Sdk="Microsoft.NET.Sdk.Web"> в тестовый проект, а также использовать метапакет.

Насколько я знаю, это работает так: когда вы ссылаетесь на Microsoft.AspNetCore.App, он будет использовать самую низкую версию, какую только может. Так, если, например, ваша целевая структура - netcoreapp2.1, тогда потребуется 2.1.1. Когда он будет собран, он будет смотреть, какая максимальная версия общей платформы, которую вы установили, использовать и использовать. Если у вас установлены следующие среды выполнения: 2.2.0, 2.1.5, 2.1.12, он будет перенесен на 2.1.12. Существуют некоторые дополнительные политики отката, относящиеся к второстепенным (если это предварительная версия или нет), но они происходят только тогда, когда не удается найти среду выполнения, соответствующую основной и вспомогательной версиям.

См. Также: https://github.com/aspnet/AspNetCore/issues/3292 и https://github.com/aspnet/AspNetCore.Docs/issues/6430

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