升级在.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.
出现此错误的原因是什么?如何解决此问题再次构建项目?
答案 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.0
和netstandard2.0
自动设置AssetTargetFallback
,与项目文件中定义的任何PackageTargetFallback
值冲突。