无法从.NET类库xUnit测试加载Npgsql

我正在学习一些实体框架,并已开始围绕它编写一些测试用例。


我遇到一个问题,即使我可以在.net应用程序本身中正常运行(并且程序集的版本相同),也无法在测试用例中加载程序集。


我得到的错误:


消息:System.IO.FileLoadException:无法加载文件或程序集“ Npgsql.EntityFrameworkCore.PostgreSQL,版本= 2.0.2.0,区域性=中性,PublicKeyToken = 5d8b90d52f46fda7”或其依赖项之一。无法验证强名签名。程序集可能已被篡改,或者已被延迟签名,但未使用正确的私钥完全签名。(来自HRESULT的异常:0x80131045)


它可以在.net应用中使用

我从让Windows窗体应用程序运行正常开始。这是针对本地postgres DB使用SimpleInjector,EF Core,Npgsql。我已经使它可以正常工作(数据库创建,迁移等),并且像这样加载了DataContext(我的DbContext):


DbContextOptionsBuilder builder = new DbContextOptionsBuilder<DataContext>();

DbContextOptions<DataContext> options = (DbContextOptions<DataContext>)builder.UseNpgsql(connectionString).Options;

            return new DataContext(options,NLog.LogManager.GetCurrentClassLogger());

我可以做一个简单的测试,从数据库中列出组织。当前这是在Form1中完成的。


因此,进入测试(我遇到问题的地方)

我向新的“测试”类库(EF Core,Npgsql等)添加了相同的依赖项。我也依赖EntityFrameworkTest项目,因此我可以引用其模型。


我简化了测试用例(OrgDBTest),以便它尝试在其构造函数中创建上下文。我这样做是为了让我知道我的问题与SimpleInjector无关。


我的期望是测试将运行,并在其构造函数中创建一个DbContext。但是,我无法加载程序集,因此无法创建DbContext ...,以便可以继续创建/播放测试。


代码在这里(非常小):https : //github.com/scornflake/entityframework-learn


但是很迷失,好像我在测试用例中所做的和在应用程序中所做的一样,但是程序集加载似乎有所不同。


有任何想法吗?


慕田峪7331174
浏览 130回答 1
1回答

绝地无双

我没有根本原因,但是从xUnit切换到NUnit可以使一切正常。我只能假定xUnit运行程序在程序集加载/安全性方面存在一些根本的差异(我希望我知道它是什么,但是我已经花了很多时间才能达到这一点!)
打开App,查看更多内容
随时随地看视频慕课网APP