C# .Net Framework 4.7.2引用.Net标准2.0项目

C# .Net Framework 4.7.2引用.Net标准2.0项目,c#,smo,.net-standard-2.0,.net-4.7.2,C#,Smo,.net Standard 2.0,.net 4.7.2,我的情况: 我有一个.NET4.7.2WinForms应用程序。 它引用的项目是.Net标准类库 .Net标准库使用PackageReference引用Microsoft.SqlServer.SqlManagementObjects NuGet包 当我构建winforms应用程序时,它从net462 lib文件夹而不是netstandard2.0文件夹中引入Microsoft.SqlServer.SqlManagementObjects包。这是一个问题,因为.Net标准版本的库具有不同的类(例如

我的情况: 我有一个.NET4.7.2WinForms应用程序。 它引用的项目是.Net标准类库 .Net标准库使用PackageReference引用Microsoft.SqlServer.SqlManagementObjects NuGet包

当我构建winforms应用程序时,它从net462 lib文件夹而不是netstandard2.0文件夹中引入Microsoft.SqlServer.SqlManagementObjects包。这是一个问题,因为.Net标准版本的库具有不同的类(例如,它使用Microsoft.Data.SqlConnection而不是System.Data.SqlConnection)。因此,当应用程序运行时,会出现以下错误 System.MissingMethodException:找不到方法:“Void Microsoft.SqlServer.Management.Common.ServerConnection..ctor(Microsoft.Data.SqlClient.SqlConnection)”


这有什么办法吗?我觉得如果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>

1.2.3 
$(PkgMicrosoft\u SqlServer\u SqlManagementObjects)lib\netstandard2.0\Microsoft.SqlServer.SqlManagementObjects.dll

看起来你并不孤单,请看,我会将你的答案标记为正确,这与他们在我提交给github项目的问题中的回答类似:。最后,我只是将SMO调用拆分成一个单独的.Net Framework库,因为我没有太多地使用它,而对代码进行了一点重构,因为我认为在我的例子中这更简单。