Текущий .NET SDK не поддерживает таргетинг на .NET Core 2.1.3 - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу убедиться, что мое приложение создано на основе .NET Core 2.1.3, поэтому я установил SDK версии 2.1.401 и установил TargetFrameworkVersion проекта на 2.1.3.

Это дает мне следующее сообщение об ошибке (выделено мое):

C: \ Program Files \ dotnet \ sdk \ 2.1.401 \ Sdks \ Microsoft.NET.Sdk \ target \ Microsoft.NET.TargetFrameworkInference.targets (137,5): ошибка NETSDK1045: Текущий .NET SDK не поддерживает таргетинг .NET Core 2.1.3. Либо предназначайтесь для .NET Core 2.1 или ниже, либо используйте версию .NET SDK, которая поддерживает .NET Core 2.1.3.

Итак, интересно то, что при сборке используется только что установленный SDK (2.1.401), который должен поддерживать .NET Core 2.1.3, но он по-прежнему жалуется на то, что .NET Core 2.1.3 не поддерживается. Это не имеет смысла для меня ...

Что здесь может быть не так?

Ответы [ 2 ]

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

У меня была такая же проблема, и в то время я использовал Visual Studio 2017 и установил последний .net SDK (который был на момент публикации 2.2.401). Установка SDK 2.2.107 и добавление его в файл global.json (он у меня есть в корне моего проекта) решена проблема для меня.

{
  "sdk": {
    "version": "2.2.107"
   }
}

Также см. этот пост на форуме сообщества разработчиков Visual Studio.

0 голосов
/ 05 сентября 2018

(Для моего ответа я предполагаю, что вы создаете зависимое от фреймворка приложение, а не отдельное приложение.)

Вы не можете установить 2.1.3 напрямую как <TargetFramework> в .csproj, потому что отличается только версия патча.

Разрешены только следующие записи: https://docs.microsoft.com/en-us/dotnet/standard/frameworks
Так что в вашем случае .csproj должен иметь <TargetFramework>netcoreapp2.1</TargetFramework>.

Но, как отметил Дамир в комментарии, вы можете принудительно установить версию, если добавите <RuntimeFrameworkVersion>2.1.3</RuntimeFrameworkVersion> к <PropertyGroup>.

Вы можете проверить эффект этого изменения, если откроете диалоговое окно «Управление пакетами NuGet» и посмотрите на версию метапакета Microsoft.NETCore.App, которая неявно используется.

Без <RuntimeFrameworkVersion> это 2.1.0, иначе должно быть 2.1.3.

Но кроме этого, иногда есть и другие факторы, которые неявно определяют используемую версию.

Например, если вы хотите создать автономное приложение, вы должны указать <RuntimeIdentifier>, который также заставит версию платформы 2.1.3, потому что он опубликует самое большое время выполнения патча на Ваша машина автоматически.

Тем не менее, я бы не рекомендовал устанавливать какие-либо <RuntimeFrameworkVersion> вручную по большей части.

Начиная с .NET Core 2.1 все зависящие от фреймворка приложения (созданные с использованием .NET Core 2.0 или более поздней версии) автоматически откатятся до последней установленной версии minor если исходная версия среды выполнения отсутствует в системе.

Таким образом, если в целевой системе установлен только .NET Core 2.1.3, ваше зависящее от фреймворка приложение .NET Core 2.1.0 автоматически использует эти среду выполнения и фреймворк.

Подробнее о механизме выбора версии .NET Core вы можете прочитать здесь .

...