Приложение ASP.NET Core внезапно нуждается в новой конкретной версии без изменений - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть приложение ASP.NET Core, работающее в контейнере Docker (2.1-aspnetcore-runtime).

Контейнер Docker с приложением работал без проблем в течение двух месяцев.Недавно мне пришлось обновить ConnectionString в AppSettings.Поэтому я изменил файл JSON и развернул новую версию докера.

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

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.1.6' was not found.
  - Check application dependencies and target a framework version installed at:
      /usr/share/dotnet/
  - Installing .NET Core prerequisites might help resolve this problem:
      http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
  - The .NET Core framework and SDK can be installed from:
      https://aka.ms/dotnet-download
  - The following versions are installed:
      2.1.4 at [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]

Зачем приложению вдруг нужна версия "2.1.6"?Приложение не изменилось, и два месяца назад версия "2.1.6" даже не существовала.

Кроме этого, есть специальный контейнер Docker для "2.1.6" (2.1.6-aspnetcore-во время выполнения).Почему новейшая версия недоступна в обычном контейнере "2.1-aspnetcore-runtime"?

1 Ответ

0 голосов
/ 07 декабря 2018

Зачем приложению вдруг нужна версия "2.1.6"?Приложение не изменилось, и два месяца назад версия "2.1.6" даже не существовала.

Это легко объяснить.Более новые шаблоны ASP.NET Core 2.1 (и более поздние версии) создаются с неявным управлением версиями для Microsoft.AspNetCore.All / Microsofot.AspNetCore.App пакетов.

В ASP.NET Core 2.1 илипозже вы можете указать ссылку на пакет Microsoft.AspNetCore.All без версии.Если версия не указана, SDK указывает неявную версию (Microsoft.NET.Sdk.Web).Мы рекомендуем полагаться на неявную версию, указанную в SDK, и не устанавливать явно номер версии в ссылке на пакет.Если у вас есть вопросы об этом подходе, оставьте комментарий GitHub в разделе «Обсуждение» для неявной версии Microsoft.AspNetCore.App.

Ваши записи в csproj будут выглядеть так:

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

вместо

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.4" />

Это гарантирует, что каждая перестройка будет использовать / подбирать последние второстепенные пакеты , доступные в системе.Это относится к портативным приложениям.Автономные в основном делают то же самое, но со временем выполнения, доступным во время публикации.

Это то, что вызывает у вас проблему в первую очередь.

Почему новейшая версия недоступна в обычном контейнере "2.1-aspnetcore-runtime"?

Вы, вероятно, не запускали docker pull microsoft/dotnet:2.1-aspnetcore-runtime до создания / сборки (или запуска) вашего докер-контейнера.

Если вы этого не сделаете, он будет использовать последняя локально помеченная версия (но не самая последняя версия, доступная для этого тега в докере-концентраторе), потому что microsoft/dotnet:2.1-aspnetcore-runtime будет указывать на более новые минорные версии, когда они выйдут, но для этого требуется, чтобы вы сделали новую попыткуполучить самую последнюю версию (повторно) помеченного изображения.

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