c# - 使用 Azure SignalR 时,无法加载 Microsoft.Extensions.Logging.Abstractions

标签 c# azure asp.net-mvc-5 signalr

我正在使用 Asp.Net MVC5 并尝试在我们的 Azure 数据库上实现具有 SQL 依赖性的 Azure SignalR。我能够很好地运行我们的应用程序,并且我之前也有本地托管的 SignalR 工作,但是当我尝试使用 Azure SignalR 并添加:

    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            //starting azure signalR
            app.MapAzureSignalR(this.GetType().FullName);
        }
    }

对于我的 Startup.cs 类以及 web.config 中必要的连接字符串,我收到此错误:

Could not load file or assembly 'Microsoft.Extensions.Logging.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我已尝试卸载并重新安装 Azure SignalR NuGet 包,我已尝试确保解决方案中的版本匹配(有 10 个项目),我已删除 bin 和 obj 文件夹,我已确保packages.config和.csproj文件匹配正确的版本。有时它会要求 Version=2.1.0.0,切换回该版本后,它会再次针对 Microsoft.Aspnetcore 或 Logging.Abstractions V1 的不同错误发出另一个错误。

我真的不知道从这里该去哪里,我在.net mvc5中下载了一个Azure SignalR示例并且能够正常工作,但由于某种原因它在这个大解决方案中不起作用。总的来说,我对开发很陌生,因此我们将不胜感激。

更新:根据下一步该做什么的建议,我在 Microsoft.Extensions.Logging.Abstractions 的 Web.config 中添加了一个 bindingRedirect。这清除了错误,但为 .Logging 提供了相同的错误。为此添加了一个绑定(bind)重定向,并为 Microsoft.Extensions.Options 得到了相同的错误,做了同样的事情并修复了。但现在我收到此错误:

Could not load file or assembly 'System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.

即使添加了这个 bindingRedirect 后,我​​仍然遇到相同的错误:

  <dependentAssembly>
        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.3.0" newVersion="4.5.3.0" />
  </dependentAssembly>

我卸载并重新安装了System.Memory nuget,检查了packages.config、web.config和.csproj文件,它们都匹配相同的版本。

最佳答案

正如 mxmissile 所指出的,这将是不同软件包请求的不同版本之间的冲突。正如您所指出的,SignalR 包本身可以正常工作,因此该包并不是专门的问题。

事实上,有多个项目也不重要 - 包是按项目安装的,尽管如果版本匹配,ASP.NET 会重用它们。我不会说这种情况不可能发生,但它不应该基于它的工作原理。

如果没有安装的软件包和版本的完整列表,其他人几乎不可能重现,但是需要做一些事情来尝试追踪冲突。

  1. 检查 Web.Config 中库的列表。应该有类似 <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0" /> 的内容对于 Microsoft.Extensions.Logging.Abstractions其中 3.1.1.0 是当前安装的版本。如果它已关闭,通常卸载/重新安装会清除此问题。无法重现该问题,我不能肯定地说,但检查以确保这是正确的可以解决问题。我过去也遇到过删除 bindingredirect 的情况。属性(property)彻底解决了冲突。
  2. 要做的第二件事有点乏味,但应该准确找出问题所在。将当前只有 SignalR 的项目开始一一添加另一个项目中包含的 Nuget 包,每次都测试构建。一旦构建失败,您就会知道冲突在哪里,并可以努力解决它。
  3. bindingredirect属性的存在是为了防止此类问题,但如果没有其他方法,the codeBase property里面dependantAssembly列表将允许您指示 CLR 包含给定程序集的多个版本。这使得项目更难以维护,因为如果版本要求发生变化,您需要手动更新此列表。

关于c# - 使用 Azure SignalR 时,无法加载 Microsoft.Extensions.Logging.Abstractions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59833737/

相关文章:

entity-framework - MVC 5 通过重用 EF 生成的代码使用 ViewModel 进行编辑

asp.net-mvc - razor ActionLink 中的 Javascript 变量

c# - Wpf ListBox 数据绑定(bind)显示 TreeViewItem 细节

c# - 如何使用 NetworkManager 为所有客户端同步场景加载

c# - MySql.Data,无法解析,因为它是针对另一个版本构建的

asp.net - 更改 Azure 网站的负载平衡服务器?

azure - Azure Development Fabric 有哪些限制?

javascript - 在knockout.js中绑定(bind)多个viewmodel

c# - C#:在列表中查找类字段

azure - 使用 terraform 和 arm 模板通过工作流程部署逻辑应用程序的最佳方法?