C# ASP核心标识-内存中的单元测试错误
我正在尝试对我的一个项目进行单元测试,该项目在VS2017中使用ASP标识(EF核心) 我遇到的问题是,当我在内存中使用EF cores创建DB上下文时,会出现以下错误- 消息:System.IO.FileLoadException:无法加载文件或程序集“Microsoft.Extensions.DependencyInjection.Abstractions,Version=1.1.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100) 我正在使用以下nuget包C# ASP核心标识-内存中的单元测试错误,c#,unit-testing,asp.net-identity,visual-studio-2017,in-memory-database,C#,Unit Testing,Asp.net Identity,Visual Studio 2017,In Memory Database,我正在尝试对我的一个项目进行单元测试,该项目在VS2017中使用ASP标识(EF核心) 我遇到的问题是,当我在内存中使用EF cores创建DB上下文时,会出现以下错误- 消息:System.IO.FileLoadException:无法加载文件或程序集“Microsoft.Extensions.DependencyInjection.Abstractions,Version=1.1.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”或其依赖
- Microsoft.AspNetCore.Identity.EntityFrameworkCore-1.1.2
- Microsoft.EntityFrameworkCore.InMemory-1.1.2
public class TestDbContext : IdentityDbContext<User>
{
public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
{
}
}
public class User : IdentityUser
{
}
[Fact]
public void Test1()
{
var builder = new DbContextOptionsBuilder<TestDbContext>();
builder.UseInMemoryDatabase();
var context = new TestDbContext(builder.Options);
}
公共类TestDbContext:IdentityDbContext
{
公共TestDbContext(DbContextOptions选项):基本(选项)
{
}
}
公共类用户:IdentityUser
{
}
[事实]
公共void Test1()
{
var builder=new DbContextOptionsBuilder();
builder.UseInMemoryDatabase();
var context=newtestdbcontext(builder.Options);
}
根据我的观察和一些研究,我认为这与XUnit测试运行程序有关。这是我的工作逻辑
ops存储库中依赖于Microsoft.Extensions.DependencyInjection.Abstractions的所有程序集参考版本1.1.1(这是通过在引用下手动查看依赖项并在生成后检查所有输出DLL来验证的)
使用ReSharpers test runner运行测试,一切正常。
使用NuGet数据包managedxunit.runner.visualstudio运行测试时抛出ops异常。。。有东西正试图加载Microsoft.Extensions.DependencyInjection.Abstracts
1.1.0版,但仅当使用xunit.runner.visualstudio运行时
做一些研究这似乎是测试运行者以前的问题,但是安装NuGet packageMicrosoft.DotNet.InternalAbstractions
和或Microsoft.NET.test.Sdk
的普遍接受的解决方案似乎都不起作用(单独或相互配合)
在单元测试中运行此功能的当前解决方案。。。降级EF,使对Microsoft.Extensions.DependencyInjection.Abstractions的最高依赖关系为1.1.0版
一旦我将所有EF库降级到1.1.1版(Microsoft.AspNetCore.Identity.EntityFrameworkCore
1.1.1版依赖于Microsoft.Extensions.DependencyInjection.Abstractions
1.1.0版)并删除了1.1.1版的所有输出DLL,测试就使用了本机测试运行程序(我不得不手动删除这些,一个干净的文件似乎没有删除它们)
我知道op可能不想降级,但希望这能让我们了解抛出异常的原因,并有助于确定下一个最佳的行动方案
编辑:
我尝试如下所示将绑定重定向添加到.csproj
文件,但仍然不起作用
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
真的
真的
根据我的观察和一些研究,我认为这与XUnit测试运行程序有关。以下是我的工作逻辑
ops存储库中依赖于Microsoft.Extensions.DependencyInjection.Abstractions的所有程序集
参考版本1.1.1(这是通过在引用下手动查看依赖项并在生成后检查所有输出DLL来验证的)
使用ReSharpers test runner运行测试,一切正常。
使用NuGet数据包managedxunit.runner.visualstudio运行测试时抛出ops异常…有东西试图加载Microsoft.Extensions.DependencyInjection.Abstracts
1.1.0版,但仅当使用xunit.runner.visualstudio运行时
做一些研究这似乎是测试运行者以前的问题,但是安装NuGet packageMicrosoft.DotNet.InternalAbstractions
和或Microsoft.NET.test.Sdk
的普遍接受的解决方案似乎都不起作用(单独或相互配合)
当前在单元测试中运行此功能的解决方案…降级EF,以便对Microsoft.Extensions.DependencyInjection.Abstractions的最高依赖性是1.1.0版
一旦我将所有EF库降级到1.1.1版(Microsoft.AspNetCore.Identity.EntityFrameworkCore
1.1.1版依赖于Microsoft.Extensions.DependencyInjection.Abstractions
1.1.0版)并删除了1.1.1版的所有输出DLL,测试就使用了本机测试运行程序(我不得不手动删除这些,一个干净的文件似乎没有删除它们)
我知道op可能不想降级,但希望这能让我们了解抛出异常的原因,并有助于确定下一个最佳的行动方案
编辑:
我尝试如下所示将绑定重定向添加到.csproj
文件,但仍然不起作用
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
真的
真的
在vstest GitHub repo中跟踪此问题:在vstest GitHub repo中跟踪此问题:升级到Microsoft.NET.Test.Sdk的最新版本解决了此问题
升级到Microsoft.NET.Test.Sdk的最新版本可以解决此问题
您是如何尝试创建模拟EF上下文和数据库集的?您是否使用类似Moq的模拟框架?您是否有一些示例代码?抱歉,刚才看到了示例项目,我有一个问题