无法从 .NET class 库 xUnit 测试加载 Npgsql
Unable to load Npgsql from a .NET class library xUnit test
我正在学习一些 entity framework,并已开始围绕它编写一些测试用例。
我 运行 遇到了一个问题,即我无法在测试用例中加载程序集,即使我可以这样做(并且程序集的版本相同)在.net 应用本身。
我遇到的错误:
Message: System.IO.FileLoadException : Could not load file or assembly
'Npgsql.EntityFrameworkCore.PostgreSQL, Version=2.0.2.0,
Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' or one of its
dependencies. Strong name signature could not be verified. The
assembly may have been tampered with, or it was delay signed but not
fully signed with the correct private key. (Exception from HRESULT:
0x80131045)
它适用于 .net 应用程序
我开始使用 windows 表单应用程序 运行ning OK。
这是针对本地 postgres 数据库使用 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 中完成的。
所以,进入测试(我遇到问题的地方)
我将相同的依赖项添加到新的 "Testing" class 库(EF Core、Npgsql 等)。我也依赖于 EntityFrameworkTest 项目,所以我可以参考它的模型。
我已经简化了测试用例 (OrgDBTest),以便它尝试在其构造函数中创建上下文。我这样做是为了让我知道我的问题与 SimpleInjector 无关。
我的预期是测试会 运行,在其构造函数中创建一个 DbContext。但是我无法让它加载程序集,以便我可以创建我的 DbContext...以便我可以继续 creating/playing 进行测试。
代码在这里(很小):
https://github.com/scornflake/entityframework-learn
但是我迷路了,因为我在测试用例中做的事情似乎与在应用程序中做的一样,但程序集加载似乎有些不同。
有什么想法吗?
我不知道根本原因,但从 xUnit 切换到 NUnit 后一切正常。我只能假设 xUnit runner 在程序集加载/安全方面存在一些潜在差异(我希望我知道它是什么,但我已经花了很多时间才达到这一点!)
我正在学习一些 entity framework,并已开始围绕它编写一些测试用例。
我 运行 遇到了一个问题,即我无法在测试用例中加载程序集,即使我可以这样做(并且程序集的版本相同)在.net 应用本身。
我遇到的错误:
Message: System.IO.FileLoadException : Could not load file or assembly 'Npgsql.EntityFrameworkCore.PostgreSQL, Version=2.0.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)
它适用于 .net 应用程序
我开始使用 windows 表单应用程序 运行ning OK。 这是针对本地 postgres 数据库使用 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 中完成的。
所以,进入测试(我遇到问题的地方)
我将相同的依赖项添加到新的 "Testing" class 库(EF Core、Npgsql 等)。我也依赖于 EntityFrameworkTest 项目,所以我可以参考它的模型。
我已经简化了测试用例 (OrgDBTest),以便它尝试在其构造函数中创建上下文。我这样做是为了让我知道我的问题与 SimpleInjector 无关。
我的预期是测试会 运行,在其构造函数中创建一个 DbContext。但是我无法让它加载程序集,以便我可以创建我的 DbContext...以便我可以继续 creating/playing 进行测试。
代码在这里(很小): https://github.com/scornflake/entityframework-learn
但是我迷路了,因为我在测试用例中做的事情似乎与在应用程序中做的一样,但程序集加载似乎有些不同。
有什么想法吗?
我不知道根本原因,但从 xUnit 切换到 NUnit 后一切正常。我只能假设 xUnit runner 在程序集加载/安全方面存在一些潜在差异(我希望我知道它是什么,但我已经花了很多时间才达到这一点!)