在 .Net Standard 2.0 类库中出现了“无法加载文件或程序集”错误

19

我有一个.NET Standard 2.0类库项目,安装了Nuget包System.Data.SqlClient版本为4.4.0,并有一个Windows窗体.NET Framework 4.7项目引用该类库。

安装Nuget包并构建解决方案成功。但运行时每次代码执行到任何使用SqlClient程序集的方法处(例如SqlConnection实例)时,都会出现以下错误:

无法加载文件或程序集“System.Data.SqlClient, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其某个依赖项。系统找不到指定的文件。

考虑到这个问题,我认为这个问题在上一个主要版本的Nuget包中也存在。

编辑

我下载了Nuget包并解压缩,然后从\ ref \ netstandard2.0文件夹中手动复制了System.DataSqlClient.dll到Windows窗体项目的\ bin \ Debug文件夹中,现在它可以工作了。Microsoft.Win32.Registry包也出现了同样的情况。因此,我几乎相信这是我的问题,我做错了什么,但当我使用System.Drawing.Primitive包进行测试时,它可以完美地工作,无需复制dll。现在我真的很困惑。

4个回答

14

我想你可能已经明白了,但希望这能帮到有需要的人——我也在这上面浪费了一些时间。

所以,为了使一切正常工作,您需要在引用.NET Standard库的Windows表单项目中引用System.Data.SqlClient。从那时起,一切都应该像魔法般地运行。

正如您已经提到的,System.Data.SqlClient.dll未出现在输出目录中。 看起来.NET Standard库没有将依赖库二进制文件与其捆绑。在.NET Standard引用中没有类似于“复制本地”选项,因此我无法找到任何检查或设置此行为的方法。


2
这指引我朝着正确的方向前进。我使用NuGet在.NET应用程序端安装了该包,问题得以解决。 - Psychoboy
7
有没有办法让项目自己管理依赖项?比如说如果一个.NET Standard项目依赖于x,而一个.NET Framework项目依赖于.NET Standard项目,则.NET Framework项目也依赖于x并自动安装它? - Jamie Twells
我的问题和@JamieTwells一模一样。你有没有得到答案? - tnk479

4
我曾经遇到过同样的问题。
对我来说,解决方法是在我的.NET Standard库项目中添加nuget依赖项,使用最新的System.Data.SqlClient。

准确地说,并非所有库都包含在默认中,您必须从NuGet获取它们。非常有帮助的回复,真的帮了我很多。 - maqk

4

我曾经遇到过相同的问题。.NETStandard程序集已被添加为我的WPF项目的参考。我需要在WPF项目的.csproj文件中进行更改。

https://github.com/dotnet/sdk/issues/901中提到的解决方案可以解决这个问题。

步骤:

  1. Edit your core .csproj file in notepad.
  2. Add the below two lines in each that you find in it.

    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    
  3. Clean and rebuild your solution.

Yes... I used Notepad.


2
应避免使用的内容......从 NuGet 包中添加...搜索 System.Data.SqlClient 并添加最新的稳定版本。 - Danimal111
@DanB,这是因为 NuGet 包方法没有解决问题,我才寻找其他解决方案的。那么,“Def”是什么? - KSK
在这种情况下,“Def”是“绝对”,就像“绝对要避免”的意思。 - Benjin
为什么要避免这样做?这样不是能确保依赖版本的正确性吗?如果在.NET Standard项目中使用的版本不是最新的呢? - Kyle J V

0

我曾经遇到过类似的问题,bindingRedirect 在我的情况下有所帮助:

<bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0"/>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接