首先,一些上下文信息:
运行该平台的平台已安装.Net Framework 4.7.1。我有一个.Net Standard 2规范中的类库,以便将来支持.Net Core。现在,部分依赖项(即Dapper)使用System.Data.SqlClient。该库在我自己的计算机上可以正常工作,但是在Windows 2012服务器上部署和测试该库时会遇到问题。即,使用Dapper时出现运行时错误:Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=kfddsnfsjnfs' or one of its dependencies. The system cannot find the file specified.
请记住,我首先安装了4.5.1.0版。然后,我降级到4.4.0.0并重新运行代码。现在我遇到了相同的错误,但是这次是关于4.2.0.0。但是我似乎在Nuget上找不到此特定版本。之后,我用谷歌搜索。很多。首先,我尝试通过添加
来添加将旧版本与新版本重新绑定的功能appsettings.json:
{
"dependentAssembly": {
"assemblyIdentity": {
"name": "System.Data.SqlClient",
"publicKeyToken": "kfddsnfsjnfs",
"culture": "neutral"
},
"bindingRedirect": {
"oldVersion ": "4.4.0.0",
"newVersion": "4.5.1"
}
}
}
和app.config:
<dependentAssembly>
<assemblyIdentity name="System.Data.SqlClient" publicKeyToken="kfddsnfsjnfs" culture="neutral" />
<bindingRedirect oldVersion="4.4.0.0" newVersion="4.5.1.0" />
</dependentAssembly>
但是并没有改变。我还尝试了旧版本的SqlClient和多次重新安装。我还发现有人说要仔细检查csproj文件,以便它没有引用gac中的某些内容,但是它没有:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Authors>me</Authors>
<Product />
<Company />
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>1.0.8</Version>
</PropertyGroup>
<ItemGroup>
<Content Include="TaskMetadata.json">
<PackagePath>TaskMetadata.json</PackagePath>
<Pack>True</Pack>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="dapper" Version="1.50.5" />
<PackageReference Include="itextsharp" Version="5.5.13" />
<PackageReference Include="System.Data.SqlClient" Version="4.5.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="External\" />
</ItemGroup>
</Project>
答案 0 :(得分:3)
在两个项目中均安装4.8.2版
安装包System.Data.SqlClient-版本4.8.2
答案 1 :(得分:2)
每个库都在主应用程序的运行下运行。因此,主应用程序需要知道加载SqlClient DLL。因此,父项目(.NET 4.7.1项目)需要通过安装NuGet软件包或通过浏览.NET Standard项目下的DLL来添加引用作为参考添加SqlClient。
旧答案:该版本存在于NuGet中:https://www.nuget.org/packages/System.Data.SqlClient/4.4.0
在Package Manager控制台中(确保将“默认项目”下拉菜单设置为正确的下拉菜单),尝试卸载然后重新安装该特定版本:
Uninstall-Package System.Data.SqlClient
Install-Package System.Data.SqlClient -Version 4.4.0
更新:或者,在绑定重定向中,只需将4.2.0.0
用作oldVersion
。
答案 2 :(得分:1)
在运行单元测试用例时,我遇到了这个问题。 {"Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.":"System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"} System.IO.FileNotFoundException
当我安装System.Data.SqlClient,Version = 4.4.0.0时,它不起作用。
但是,当我安装了最新版本的System.Data.SqlClient nuget软件包时,此问题已解决。
答案 3 :(得分:0)
尝试再次通过NuGet添加System.Data.SqlClient
,尽管您可能已经将它方便地用作.NET Framework的一部分。此解决方案解决了我的问题。
答案 4 :(得分:0)
我认为当您的解决方案包含具有混合框架类型(例如.net标准,核心和框架)的项目时,就会出现此问题。我已经尝试了Internet上的所有解决方案,唯一对我有用的解决方案是编辑产生错误并添加
的特定项目文件。{{1}}
奇怪的是,大多数.net框架项目已经有了这一行,这正是我从中获得的。从nuget重新安装不会正确更新项目文件,即使在其他项目中也是如此。
答案 5 :(得分:0)
我遇到了同样的问题,基本上我正在开发一个胜利表格应用程序。 .net框架,而我的类库是.net标准。
我尝试安装和卸载System.Data.SqlClient ten times
,但没有用
随后,当我在UI层中安装了相同的引用并随后起作用时,我便想到了一些事情。即使我没有任何代码在UI层上与Sql对话,但由于UI也无法识别对Dapper的引用,因此又引发了另一个问题,我也必须在UI上安装Dapper引用。然后一切都很好。
我真的很惊讶那怎么没用。在将UI引用到类库之后,该类库应该执行所需的操作并将数据传递给UI!
答案 6 :(得分:0)
我在使用 .NET Core 时遇到此错误(使用最新的 Microsoft.Data.SqlClient
)并且不得不从
Microsoft.Data.SqlClient
到
Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient
为了让 NLog 加载 Microsoft.Data.SqlClient