更新到新软件包后,Microsoft.EntityFrameworkCore.SqlServer 1.1.2尝试创建DBContext时遇到错误:
发生System.IO.FileLoadException HResult = 0x80131040
消息=无法加载文件或程序集 “Microsoft.Extensions.DependencyInjection.Abstractions, Version = 1.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'或 其中一个依赖项。定位程序集的清单定义 与装配参考不匹配。 (HRESULT的例外情况: 0x80131040)Source = Microsoft.EntityFrameworkCore StackTrace:at Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions 选项)at Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions databaseOptions) C:\ SRC \后端\包\ Services.Infrastructure \ DATA \ SqlServerDbContext.cs:行 16点到 Translations.Api.Data.TranslationsDbContext..ctor(DatabaseOptions databaseOptions) C:\ SRC \后端\模块\翻译\ Translations.Api \数据\ TranslationsDbContext.cs:线 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之前一切正常。请帮忙解决问题。
答案 0 :(得分:36)
由于您在.net框架库中使用该项目,因此自动生成的绑定重定向存在问题(可能会在即将发布的15.3 update / 2.0 .net核心CLI中解决)。要解决此问题,请将其添加到cpsroj
文件中(最好在<Import>
文件的任何.targets
元素之前(如果存在):
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
这应该强制MSBuild创建/更新包含必要绑定重定向的YourProject.dll.config
文件。
答案 1 :(得分:7)
如果您在 .NET Core 中使用 Azure Functions,这将起作用
如果您使用的不是 .net 框架库,而是 .net 核心库,则接受的解决方案将不起作用,因为“您不应该在 netcoreapp 项目上设置属性 AutoGenerateBindingRedirects,因为绑定重定向不是甚至在 netcoreapp 中都不是东西,它们只是 .NET Framework 中的一个概念”(来源:https://github.com/microsoft/ApplicationInsights-dotnet/issues/1699#issuecomment-592693436)。
试试这个:
虽然这看起来是一个激进的解决方案,但它确实有效,因为该库已经通过 Microsoft.Azure.Functions.Extensions 间接安装:
重要:不要尝试通过将 .NET Core 从 3.1 升级到 5.0 来解决此问题。 .NET 5.0 中仍不支持 Azure 函数。补丁将于 2021 年初推出: https://github.com/Azure/azure-functions-host/issues/6674#issuecomment-712596112
编辑:.NET Core 现在支持 Azure 函数(除非您使用持久实体,在这种情况下,您必须等待 .NET 6.0):
今天 (10/3/2021),我们宣布支持在 Azure Functions 上运行生产 .NET 5 应用。 https://techcommunity.microsoft.com/t5/apps-on-azure/net-on-azure-functions-roadmap/ba-p/2197916
答案 2 :(得分:5)
这是一个旧线程,但是在将Azure功能从dotnet核心版本3更新到3.1之后,我遇到了类似的问题。
错误消息:Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.9.0
在这种情况下,您需要将.proj文件中的Azure函数版本更新为“ v3”。
答案 3 :(得分:1)
对我来说,将所有支持.Net Standard的软件包从3.x.x降级到2.2.0是什么? 我猜想3.x软件包与不支持.net框架的.NET标准的不同版本有关。
答案 4 :(得分:1)
如果 Luis Gouveia 解决方案不适合您,请尝试降级项目中包含的其他依赖项。 .NET 标准存在一些兼容性问题。
答案 5 :(得分:0)
我在下面用Google搜索了我的例外情况,这使我进入了这个stakoverflow帖子。
System.IO.FileNotFoundException:'无法加载文件或程序集 'Microsoft.Extensions.OptionsModel,版本= 1.0.0.0,文化=中性, PublicKeyToken = adb9793829ddae60'或其依赖项之一。的 系统找不到指定的文件。'
我有相关的绑定重定向,但是如果我删除所有bin / obj文件夹,则此后工作正常。
答案 6 :(得分:0)
对我来说,原因是过时的VS。帮助>检查更新>更新。更新后-问题消失了。
答案 7 :(得分:0)
我将我的软件包从NuGet更新到最新版本,并且可以100%工作。
答案 8 :(得分:0)
我遇到了这个问题。但是数据包是Microsoft.Extensions.Primitives。 就我而言,我将其安装在我的项目中,也安装在nuget的项目测试中。也许可以帮助某人。
答案 9 :(得分:0)
我正在开发我的简单 .Net 5.0 控制台应用程序,在修改我项目的命名空间时,“自动安装”仅添加 Menubar = {
0: "Yes",
1: "test",
2: "test2"
}
MenuPrint = int(input(f"Select from: {[k for k in Menubar.keys()]} -> "))
print(Menubar[MenuPrint])
而不是包 nuget Microsoft.Extensions.DependencyInjection.Abstraction
我花了一段时间才意识到...