我一直在设置一些测试用例,其中一部分是想确保我可以运行一些EntityFramework测试。
我在加载驱动程序时遇到问题(在本例中为 Npgsql(。我可以在应用程序中加载它,但不能加载测试用例。
我整理了一个微不足道的项目来展示这个问题。 https://github.com/scornflake/StrongNameNightmare
a( 从应用程序加载程序集工作 b( 在测试用例中,相同的 Assembly.Load 失败,并显示(无法加载文件或程序集'Npgsql.EntityFrameworkCore.PostgreSQL, Version=2.0.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' 或其依赖项之一。无法验证强名称签名。 程序集可能已被篡改,或者它已延迟签名,但未使用正确的私钥完全签名。
两个文件(包中的文件和复制到程序集输出文件夹的文件(的 SHA1 是相同的:
SHA1 hash of packages\Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2\- libetstandard2.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll: 29261f08a466e3b5c24ff8d1aa1810b29c3ff8a5
- SHA1 hash of Tests\bin\Debug\Npgsql.EntityFrameworkCore.PostgreSQL.dll: 29261f08a466e3b5c24ff8d1aa1810b29c3ff8a5
A 'sn -v' of packages\Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2\libetstandard2.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll works.
a 'sn -v' of Tests\bin\Debug\Npgsql.EntityFrameworkCore.PostgreSQL.dllfail
Failed to verify assembly -- Strong name validation failed.
我假设未能验证 Npgsql 驱动程序的"测试"版本的强名称是在测试中加载程序集失败的根本原因。
我尝试禁用强名称验证 (sn -Vr *,*(,但没有效果。
我在这里有点不知所措。我不是VS/程序集方面的专家,也许有人可以阐明为什么程序集无法通过不同文件夹中的强名称验证?对我来说似乎很奇怪。
我从未找到根本原因,但是从xUnit切换到NUnit可以解决.加载失败。所以,我想我会和NUnit一起去!