.Net Framework 4.7.2 引用 .Net Standard 2.0 项目

.Net Framework 4.7.2 Referencing .Net Standard 2.0 project

我的情况: 我有一个 .Net 4.7.2 WinForms 应用程序。 它引用的项目是 .Net Standard class 库 .Net Standard 库使用 PackageReference

引用 Microsoft.SqlServer.SqlManagementObjects NuGet 包

当我构建 winforms 应用程序时,它从 net462 lib 文件夹而不是 netstandard2.0 文件夹中提取 Microsoft.SqlServer.SqlManagementObjects 包。这是一个问题,因为库的 .Net Standard 版本具有不同的 classes(例如,它使用 Microsoft.Data.SqlConnection 而不是 System.Data.SqlConnection)。因此,当应用程序为 运行 时,您会收到一条错误消息 System.MissingMethodException:未找到方法:'Void Microsoft.SqlServer.Management.Common.ServerConnection..ctor(Microsoft.Data.SqlClient.SqlConnection)'

有什么办法解决这个问题吗?我觉得 SMO 库应该被分成不同的包,用于 .Net Standard 和 .Net Framework,如果它们有这样的差异。

我相信官方的立场是这是图书馆创作问题,所以没有一个好的方法来做你想做的事。

虽然有一个令人发指的黑客攻击详细 here,类似于:

<PackageReference Include="Microsoft.SqlServer.SqlManagementObjects" ExcludeAssets="Compile" GeneratePathProperty="true">
    <Version>1.2.3</Version> 
</PackageReference>
<Reference Include="Microsoft.SqlServer.SqlManagementObjects">
    <HintPath>$(PkgMicrosoft_SqlServer_SqlManagementObjects)lib\netstandard2.0\Microsoft.SqlServer.SqlManagementObjects.dll</HintPath> 
</Reference>