在我升级.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标准库,因此它们可以在.NET Core 1.1下运行。我完全失败了,因为.NET Framework版本的测试运行得很好,而且我很确定我会注意到我的测试在此之前失败了。有没有人有任何建议?
答案 0 :(得分:4)
.NET Core 1.1中存在一个错误,涉及文件引用的程序集:https://github.com/dotnet/coreclr/issues/10037#issuecomment-285394031
这个问题可以在这里适用吗?