.NET Core 2.0升级:PackageTargetFallback和AssetTargetFallback不能同时使用

Upgrading to .NET Core 2.0: PackageTargetFallback and AssetTargetFallback cannot be used together

升级正在编译的项目并且在 .NET Core 1.0 或 1.1 上 运行 正常时,将目标框架更新为 .NET Core 2.0 (netcoreapp2.0) 会导致构建失败并显示以下错误:

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

这个错误的原因是什么,如何解决才能重新构建项目?

在 .NET Core 1.0 和 1.1 中,在引用已知可在 .NET Core 上运行但未正式支持它的包时需要设置 PackageTargetFallback - 例如PCL 库或为遗留 dotnet 框架名字构建的库。

因此,项目(.csproj.fsproj、...)将包含类似于以下内容的行:

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

在大多数情况下,可以简单地删除此行并且应该构建项目,因为 .NET Core 2.0 已经将 AssetTargetFallback 定义为 net461 -这意味着无需额外配置即可使用与 .NET Framework 4.6.1 或更高版本兼容的任何 NuGet 包。

如果这会引入更多构建/恢复错误,请将行更改为:

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

更改的原因是 PackageTargetFallback 被认为已弃用,应替换为 AssetTargetFallback,后者的行为略有不同。

工具中的重大变化是 netcoreapp2.0netstandard2.0 自动设置 AssetTargetFallback,这与项目文件中定义的任何 PackageTargetFallback 值冲突。