我的情况:我有一个.Net 4.7.2 WinForms应用程序.它引用的项目是一个.Net标准类库.Net标准库引用Microsoft.SqlServer.SqlManagementObjects NuGet包使用PackageReference。
当我构建winforms应用程序时,它从net462 lib文件夹而不是netstandard2.0文件夹中拉入Microsoft.SqlServer.SqlManagementObjects包。这是一个问题,因为.Net标准版的库有不同的类(例如,它使用Microsoft.Data.SqlConnection而不是System.Data.SqlConnection)。所以当应用程序运行时,你会得到一个错误,说System.MissingMethodException.Method not found: 'Void Microsoft.Data.SqlConnection'。Method not found: 'Void Microsoft.SqlServer.Management.Common.ServerConnection.ctor(Microsoft.Data.SqlClient.SqlConnection)' 。
有什么办法可以解决这个问题吗?我觉得如果SMO库有这样的差异,应该把SMO库分成.Net Standard和.Net Framework的不同包。
我相信官方的立场是,这是库的编写问题,所以没有一个好的方法来做你想要的事情。
有一个令人发指的黑客详解 此处 虽然,这是像。
<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>