.NET Core 单元测试抛出 FileLoadException

.NET Core Unit Tests Throwing FileLoadException

我确定这些测试 运行 在我升级 .NET Core 之前没问题,但我不知道它们是如何损坏的或为什么会损坏。

我开发了三个库。我们称它们为 A、B 和 C。B 直接依赖于 A,而 C 直接依赖于 B 和 A。它们都是多目标的,如 .NET Standard 1.1+ 和 .NET Framework 4.5 库。

库 A 和 B 工作得很好。库 B 的单元测试依赖于 A 的正常运行,作为库 B 的传递依赖。构建仍然有效,测试 (xUnit) 运行 正常。

在库C中,我直接消费了A和B。尽管 C 及其单元测试构建得很好,但它们 运行 不正确。 C 的单元测试项目的布局与库 B 的完全相同。

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

  <PropertyGroup>
    <TargetFrameworks>netcoreapp1.1;net452</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\C\C.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>

当运行进行单元测试时(在Visual Studio、dotnet 测试或Cake 中),所有测试都在完整框架下通过。当 .NET Core 单元测试 运行 时,那些依赖于 B 的辅助方法(反过来使用 A)的方法抛出异常:

System.IO.FileLoadException: Could not load file or assembly 'A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)

我检查了明显的问题:该库存在于我们内部的 NuGet 提要中,B 和 C 之间的版本号匹配(只有一个版本,因此也没有程序集绑定重定向),A 和 B 肯定是.NET Standard 库,因此它们将在 .NET Core 1.1 下工作。我完全不知所措,因为 .NET Framework 版本的测试 运行 很好,而且我很确定我之前会注意到我的测试失败了。有人有什么建议吗?

.NET Core 1.1 中存在关于文件引用程序集的错误:https://github.com/dotnet/coreclr/issues/10037#issuecomment-285394031

这个问题适用于这里吗?