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

时间:2018-05-03 23:01:28

标签: .net .net-assembly xunit.net sn

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

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

我已经整理了一个显示问题的琐碎项目。 https://github.com/scornflake/StrongNameNightmare

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

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

  • 包的SHA1哈希\ Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2 \ lib \ netstandard2.0 \ Npgsql.EntityFrameworkCore.PostgreSQL.dll: 29261f08a466e3b5c24ff8d1aa1810b29c3ff8a5
  • 测试\ bin \ Debug \ Npgsql.EntityFrameworkCore.PostgreSQL.dll的SHA1哈希: 29261f08a466e3b5c24ff8d1aa1810b29c3ff8a5

一个'sn -v'软件包\ Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2 \ lib \ netstandard2.0 \ Npgsql.EntityFrameworkCore.PostgreSQL.dll可以工作。

测试\ bin \ Debug \ Npgsql.EntityFrameworkCore.PostgreSQL.dll 的'sn -v'失败

Failed to verify assembly -- Strong name validation failed.

我认为无法验证Npgsql驱动程序的'测试'版本的强名称是导致无法在测试中加载程序集的根本原因。

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

我在这里有点不知所措。我不是VS / Assemblies的专家,也许有人可以阐明为什么程序集不会在不同的文件夹中传递强名称验证?对我来说似乎很奇怪。

1 个答案:

答案 0 :(得分:0)

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