升级到.NET Core 2.0:PackageTargetFallback和AssetTargetFallback不能一起使用

时间:2017-08-08 13:14:04

标签: asp.net-core nuget .net-core csproj .net-core-2.0

升级在.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.

出现此错误的原因是什么?如何解决此问题再次构建项目?

1 个答案:

答案 0 :(得分:102)

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

因此,项目(.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.0netstandard2.0自动设置AssetTargetFallback,与项目文件中定义的任何PackageTargetFallback值冲突。