我一直在设置一些测试用例,其中一部分是想确保我可以运行一些 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 相同:
- 包的 SHA1 哈希\Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2\lib\netstandard2.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll:29261f08a466e3b5c24ff8d1aa1810b29c3ff8a5
- Tests\bin\Debug\Npgsql.EntityFrameworkCore.PostgreSQL.dll 的 SHA1 哈希:29261f08a466e3b5c24ff8d1aa1810b29c3ff8a5
packages\Npgsql.EntityFrameworkCore.PostgreSQL.2.0.2\lib\netstandard2.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll 的“sn -v”有效。
Tests\bin\Debug\Npgsql.EntityFrameworkCore.PostgreSQL.dll 的“sn -v”失败
Failed to verify assembly -- Strong name validation failed.
我假设未能验证 Npgsql 驱动程序的“测试”版本的强名称是在测试中加载程序集失败的根本原因。
我尝试禁用强名称验证 (sn -Vr *,*),但没有任何效果。
我在这里有点茫然。我不是 VS/Assemblies 方面的专家,也许有人可以解释为什么一个程序集不会在不同的文件夹中通过强名称验证?对我来说似乎很奇怪。