.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>
我的情况: 我有一个 .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>