无法从.NET类库xUnit测试加载Npgsql
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从.NET类库xUnit测试加载Npgsql相关的知识,希望对你有一定的参考价值。
我正在学习一些实体框架,并开始围绕它编写一些测试用例。
我遇到了一个问题,即我无法在测试用例中加载程序集,即使我可以在.net应用程序本身中这样做(并且程序集的版本相同)。
我得到的错误:
消息:System.IO.FileLoadException:无法加载文件或程序集'Npgsql.EntityFrameworkCore.PostgreSQL,Version = 2.0.2.0,Culture = neutral,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());
我可以做一个简单的测试,从DB中列出组织。目前,这是在Form1中完成的。
所以,进入测试(我遇到问题)
我将相同的依赖项添加到新的“Testing”类库(EF Core,Npgsql等)。我也依赖于EntityFrameworkTest项目,所以我可以引用它的模型。
我简化了测试用例(OrgDBTest),以便它尝试在它的构造函数中创建一个上下文。我这样做了,所以我知道我的问题与SimpleInjector无关。
我的期望是测试会运行,在其构造函数中创建一个DbContext。但是我无法让它加载程序集以便我可以创建我的DbContext ...以便我可以继续创建/玩测试。
代码在这里(非常小):https://github.com/scornflake/entityframework-learn
但是输了,因为看起来我在测试用例中和我在应用程序中做同样的事情,但是程序集加载看起来有些不同。
有任何想法吗?
我没有根本原因,但从xUnit切换到NUnit使一切正常。我只能假设xUnit跑步者在装配加载/安全性方面存在一些潜在的差异(我希望我知道它是什么,但我已经花了很多时间才到达这一点!)
以上是关于无法从.NET类库xUnit测试加载Npgsql的主要内容,如果未能解决你的问题,请参考以下文章
无法从 .NET 应用程序 (Npgsql) 连接到 Heroku Postgres