Подтвердить что ты не робот

Обновление до .NET Core 2.0: PackageTargetFallback и AssetTargetFallback не могут использоваться вместе

При обновлении проекта, который хорошо компилируется и работает на .NET Core 1.0 или 1.1, обновление целевой среды .NET Framework 2.0 (netcoreapp2.0) приводит к сбою сборки при следующей ошибке:

 error NU1003: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.

В чем причина этой ошибки и как ее можно решить, чтобы сделать сборку проекта еще раз?

4b9b3361

Ответ 1

В .NET Core 1.0 и 1.1 необходимо было установить PackageTargetFallback при обращении к пакетам, которые, как известно, работают на .NET Core, но официально не поддерживают его - например, PCL-библиотеки или библиотеки, созданные для устаревшего прокси-сервера dotnet.

В связи с этим проект (.csproj, .fsproj,...) будет содержать строку, похожую на:

<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>

В большинстве случаев эту строку можно просто удалить, а проект должен быть создан, потому что .NET Core 2.0 уже определяет AssetTargetFallback как net461 - это означает, что любой пакет NuGet, совместимый с .NET Framework 4.6.1 или выше может использоваться без дополнительной настройки.

Если это вводит больше ошибок сборки/восстановления, измените строку на:

<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

Причиной изменения является то, что PackageTargetFallback считается устаревшим и его следует заменить на AssetTargetFallback, который ведет себя немного иначе.

Разрыв в оснастке заключается в том, что netcoreapp2.0 и netstandard2.0 автоматически устанавливает AssetTargetFallback, который конфликтует с любым значением PackageTargetFallback, определенным в файле проекта.