在我的.Net Core 2.0项目中,使用.Net FW软件包代替.Net Standard(警告NU1701)

时间:2017-10-08 10:44:23

标签: c# .net nuget .net-core

我在我的.Net Core 1.0项目中使用了nuget包sqlite-net-pcl,该项目没有任何问题(使用了.Net Standard 1.1版本的软件包)。现在,我将此项目升级到.Net Core 2.0,突然之间我收到了这些构建警告:

1>C:\Projects\Project.csproj : warning NU1701: Package 'SQLitePCLRaw.lib.e_sqlite3.linux 1.1.5' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project.
1>C:\Projects\Project.csproj : warning NU1701: Package 'SQLitePCLRaw.lib.e_sqlite3.osx 1.1.5' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project.
1>C:\Projects\Project.csproj : warning NU1701: Package 'SQLitePCLRaw.lib.e_sqlite3.v110_xp 1.1.5' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project.

显然,我的.Net Core 2.0项目现在正在使用.Net Framework 4.6.1版本的nuget包,即使有.Net Standard 1.1版本可用。我知道使用.Net Core 2.0这是可能的,但我也知道,由于兼容性原因,这并不总是有效,所以为什么不能只使用实际可行的.Net Standard 1.1版本,我该怎么办?强制消除警告?

1 个答案:

答案 0 :(得分:8)

这看起来非常特定于依赖包SQLitePCLRaw.lib.esqlite3.*的版本,它们是SQLitePCLRaw.bundle_green / sqlite-net-pcl的.NET Core / .NET标准切片的传递依赖项。这可能也特定于这些软件包的1.1.5版本,因为最新版本(1.1.8)的编写方式不同以表示支持的平台 - 1.1.5软件包不包含lib文件夹,只有runtimes文件夹而没有依赖关系组,因此NuGet对支持的框架感到困惑,并假设该软件包是为.NET Framework编写的。较新版本通过为包含虚拟lib文件的受支持框架提供包含子文件夹的_._文件夹来解决此问题。

如果您想确保在依赖关系图中只有明确支持.NET Standard或.NET Core的软件包(无论您的项目目标是什么),您可以将其添加到项目文件中:

<PropertyGroup>
  <DisableImplicitAssetTargetFallback>true</DisableImplicitAssetTargetFallback>
</PropertyGroup>