【发布时间】:2017-06-30 02:32:04
【问题描述】:
我的 ASP.Net MVC 应用程序在 IIS 上本地运行时工作正常,但在部署到 Azure 时出现以下错误:
Could not load file or assembly 'Microsoft.Owin, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
这是堆栈跟踪的一部分,让我相信 SignalR 是潜在的罪魁祸首:
[FileLoadException: Could not load file or assembly 'Microsoft.Owin, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
Owin.OwinExtensions.MapSignalR(IAppBuilder builder, String path, HubConfiguration configuration) +0
Owin.OwinExtensions.MapSignalR(IAppBuilder builder, HubConfiguration configuration) +12
QuikWorx.O365Web.Startup.Configuration(IAppBuilder app) +169
根据 NuGet,我在应用程序上安装了 Microsoft.Owin 3.0.1 版,但显然某些东西(SignalR)需要 2.1.0 版。我原以为以下 bindingRedirect 会强制 SignalR 使用已安装的 3.0.1 版(已验证存在,Azure 上 /bin 中的 3.0.1 版):
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
...可惜,事实并非如此。
我也尝试了以下方法但没有成功:
- 使用 NuGet 强制重新安装 Microsoft.Owin 3.0.1。
- 强制重新安装需要 Microsoft.Owin 2.1.0 和 NuGet 的 SignalR 组件 (Microsoft.AspNet.SignalR.Core)
- 将 Microsoft.Owin 的 bindingRedirect 的 oldVersion 更改为“0.0.0.0-2.1.0.0”(这没有意义)
- 删除 Microsoft.Owin 的 bindingRedirect
- 在 Kudu 中使用
rd /Q /S删除站点目录中的所有文件和文件夹
还有什么我可以尝试的吗?
【问题讨论】:
标签: asp.net azure signalr owin assembly-binding-redirect