1. ホーム
  2. c#

[解決済み] ファイルまたはアセンブリをロードできませんでした Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.0.0

2022-03-01 12:01:47

質問

Microsoft.EntityFrameworkCore.SqlServer 1.1.2 にアップデートしたところ、DBContext を作成しようとするとエラーが発生しました。

System.IO.FileLoadExceptionが発生 HResult=0x80131040
Message=Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions.DependencyInjection.Abstractions'です。 Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' または その依存関係の1つ。配置されたアセンブリのマニフェスト定義 がアセンブリの参照と一致しない。(HRESULTからの例外です。 0x80131040) Source=Microsoft.EntityFrameworkCore StackTrace: at Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions オプション) at Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions databaseOptions) にあります。 C:\srcbackend﹑Services.Infrastructure﹑Data﹑SqlServerDbContext.cs:line 16 at Translations.Api.Data.TranslationsDbContext..ctor(DatabaseOptions databaseOptions) にある。 C:\src³³³³Modules³³Translations³³.Api³³Data³³TranslationsDbContext.cs:line 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にアップグレードする前に、すべてが正常に動作します。問題を解決するために助けてください。

解決方法は?

.net frameworkのライブラリでプロジェクトを使用しているため、自動生成されるバインディングリダイレクトに問題があります(今後の15.3アップデート/2.0 .net core CLIで解決される可能性があります)。この問題を回避するには、次のコードを cpsroj ファイル(できれば <Import> 要素のための .targets ファイルが存在する場合)。

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

これは、MSBuildが強制的に YourProject.dll.config ファイルに必要なバインディングのリダイレクトが含まれています。