一尘不染

无法加载文件或程序集Microsoft.Extensions.DependencyInjection.Abstractions,版本= 1.1.0.0

c#

更新到新软件包Microsoft.EntityFrameworkCore.SqlServer 1.1.2之后,尝试创建DBContext时出现错误:

发生System.IO.FileLoadException HResult = 0x80131040
消息=无法加载文件或程序集’Microsoft.Extensions.DependencyInjection.Abstractions,版本=
1..1.0.0,文化=中性,PublicKeyToken =
adb9793829ddae60’或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)Source
= Microsoft.EntityFrameworkCore
StackTrace:位于Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions选项),位于C:\
src \ backend
\中的Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions
databaseOptions) Packages \ Services.Infrastructure \ Data \
SqlServerDbContext.cs:C:\ src \ backend \ Modules \ Translations \
Translations.Api \ Data \
TranslationsDbContext.cs中位于Translations.Api.Data.TranslationsDbContext..ctor(DatabaseOptions
databaseOptions)的行16 :第16行

我的基础DbContext

public class SqlServerDbContext : DbContext
{
    private readonly DatabaseOptions _databaseOptions;

    protected SqlServerDbContext(DatabaseOptions databaseOptions)
    {
        if (string.IsNullOrEmpty(databaseOptions.ConnectionString))
            throw new Exception("Database connection string is missed.");

        _databaseOptions = databaseOptions;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_databaseOptions.ConnectionString);
    }
}

我使用的数据库选项

public class DatabaseOptions
{
    public string ConnectionString { get; set; }
}

我创建上下文实例的地方

 var dbOptions = new DatabaseOptions { ConnectionString = _connectionString };
 DbContext = (TContext) Activator.CreateInstance(typeof(TContext), dbOptions);
// where TContext is derived class from SqlServerDbContext

我所有的软件包都已更新。Visual Studio 2017 15.2(26430.6)。升级到1.1.2之前,一切正常。请帮助解决问题。


阅读 1672

收藏
2020-05-19

共1个答案

一尘不染

由于您使用的是.net框架库中的项目,因此自动生成的绑定重定向存在问题(可能会在即将发布的15.3更新/ 2.0
.net核心CLI中解决)。要解决此问题,请将其添加到cpsroj文件中(最好在文件的任何<Import>元素之前,.targets如果存在):

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

这应该强制MSBuild创建/更新YourProject.dll.config包含必要的绑定重定向的文件。

2020-05-19