Assembly.Load 在测试用例中失败(强命名验证也失败)...为什么?

Assembly.Load fails within a test case (strong naming validation also fails)... why?

我一直在设置一些测试用例,其中一部分是想确保我可以 运行 一些 EntityFramework 测试。

我在加载驱动程序时遇到问题(在本例中为 Npgsql)。我可以在应用程序中加载它,但不能在测试用例中加载它。

我整理了一个简单的项目来说明问题。 https://github.com/scornflake/StrongNameNightmare

a) 从应用程序加载程序集 b) 在测试用例中,相同的 Assembly.Load 失败并显示 (无法加载文件或程序集 'Npgsql.EntityFrameworkCore.PostgreSQL, Version=2.0.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' 或其依赖项之一。无法验证强名称签名。程序集可能已被篡改,或者它被延迟签名但未使用正确的私钥完全签名。)

两个文件(packages\ 中的一个和复制到程序集输出文件夹中的一个)的 SHA1 相同:

packages\Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2\lib\netstandard2.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll 的 'sn -v' 有效。

a 'sn -v' of Tests\bin\Debug\Npgsql.EntityFrameworkCore.PostgreSQL.dll 失败

Failed to verify assembly -- Strong name validation failed.

我假设无法验证 'tests' 版本的 Npgsql 驱动程序的强名称是测试中加载程序集失败的根本原因。

我试过禁用强名称验证 (sn -Vr *,*),但没有效果。

我在这里有点不知所措。我不是 VS/Assemblies 方面的专家,也许有人可以阐明为什么程序集无法通过不同文件夹中的强名称验证?我觉得很奇怪。

我从未找到根本原因,但从 xUnit 切换到 NUnit 解决了 .Load 失败。所以,我想我会选择 NUnit!