似乎无法修复:System.BadImageFormatException:无法加载文件或程序集'System.Data.SqlClient'

时间:2019-11-05 11:31:32

标签: c# mysql nuget

我的解决方案中有3个项目(ASP.NET MVC,单元测试,类库)。我想对类库的类中的方法进行单元测试。此类使用system.data.sqlclient

当我尝试运行单元测试时,此错误显示:

  

System.BadImageFormatException:无法加载文件或程序集'System.Data.SqlClient,版本= 4.4.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'。参考程序集不应该加载执行。它们只能在“仅反射”加载器上下文中加载。 (来自HRESULT的异常:0x80131058)---> System.BadImageFormatException:无法加载参考程序集以执行。”

我已经检查了所有三个项目的构建选项卡:它们都设置为Any CPU。我试图在类库中重新安装NuGet软件包。我已经检查了所有.csproj

类库.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PlatformTarget>AnyCPU</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="MySql.Data" Version="8.0.18" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="System.Data.SqlClient">
      <HintPath>..\..\..\..\..\..\..\..\..\..\Program Files\dotnet\sdk\NuGetFallbackFolder\system.data.sqlclient\4.5.1\ref\netcoreapp2.1\System.Data.SqlClient.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我的解决方案包括:

  • 使用System.Data.SqlClient的数据库项目
  • 引用数据库项目的单元测试项目

在向使用数据库的单元测试中添加一种测试方法后,我收到了错误消息:

测试方法UnitTests.DatabaseTests.TestFileStorage抛出异常: System.BadImageFormatException:无法加载文件或程序集'System.Data.SqlClient,版本= 4.4.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'。参考程序集不应该加载执行。它们只能在“仅反射”加载器上下文中加载。 (来自HRESULT的异常:0x80131058)---> System.BadImageFormatException:无法加载执行的引用程序集。

我通过使用NuGet将System.Data.SqlClient直接添加到我的单元测试项目中来解决此问题

  • 右键单击项目>管理NuGet程序包...
  • 搜索并安装“ System.Data.SqlClient”

我认为问题的根源是我的数据库项目使用的SqlClient版本与单元测试项目期望的默认版本不同(找不到该默认版本)。明确将SqlClient安装到单元测试项目中可以解决此问题。我不确定是什么决定我的单元测试项目要寻找哪个版本。