web-dev-qa-db-ja.com

ファイルまたはアセンブリをロードできませんでしたMicrosoft.Extensions.DependencyInjection.Abstractions、バージョン= 1.1.0.0

新しいパッケージMicrosoft.EntityFrameworkCore.SqlServer 1.1.2への更新後、DBContextを作成しようとするとエラーが発生しました。

System.IO.FileLoadExceptionが発生しましたHResult = 0x80131040
Message =ファイルまたはアセンブリ「Microsoft.Extensions.DependencyInjection.Abstractions、バージョン= 1.1.0.0、Culture = neutral、PublicKeyToken = adb9793829ddae60」またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)Source = Microsoft.EntityFrameworkCore StackTrace:at Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions options)at Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions databaseOptions)in C:\ src\backend\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にアップグレードする前に、すべて正常に動作します。問題の解決にご協力ください。

24
Robert N. Dean

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

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

これにより、MSBuildは、必要なバインディングリダイレクトを含むYourProject.dll.configファイルを強制的に作成/更新する必要があります。

38
Martin Ullrich