我在我的.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版本,我该怎么办?强制消除警告?
答案 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>