【问题标题】:Can't load System.Web.Cors assembly after call to Microsoft.Owin.Cors调用 Microsoft.Owin.Cors 后无法加载 System.Web.Cors 程序集
【发布时间】:2016-03-31 17:50:48
【问题描述】:

当我在解决方案资源管理器中检查 System.Web.Cors 程序集引用时,Version5.2.3.0Specific Version 属性设置为 False。路径是本地项目 bin 文件夹。从文件资源管理器检查 .dll 属性时,文件的产品版本和文件版本。也是5.2.3

我的Web.config

<dependentAssembly>
    <assemblyIdentity name="System.Web.Cors" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

我的packages.config(我认为麻烦的程序集是Microsoft.AspNet.WebApi.Cors,但我在这里包含了另一个名称相似的程序集):

<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />

Startup.cs

中的这一行抛出错误
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

这是完整的错误:

System.IO.FileLoadException was unhandled by user code
  FileName=System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  FusionLog==== Pre-bind state information ===
LOG: DisplayName = System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///P:/project-z4a/project-z4a/
LOG: Initial PrivatePath = P:\project-z4a\project-z4a\bin
Calling assembly : Microsoft.Owin.Cors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: P:\project-z4a\project-z4a\web.config
LOG: Using host configuration file: D:\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///P:/project-z4a/project-z4a/bin/System.Web.Cors.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

  HResult=-2146234304
  Message=Could not load file or assembly 'System.Web.Cors, Version=5.0.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)
  Source=Microsoft.Owin.Cors
  StackTrace:
       at Microsoft.Owin.Cors.CorsOptions.get_AllowAll()
       at z4a_dsa.Startup.Configuration(IAppBuilder app) in P:\project-z4a\project-z4a\Startup.cs:line 23
  InnerException: 

所以,我可以看到它期待 v5.0.0.0,但我看不出在哪里或为什么需要这个版本。

我已完成以下步骤来调试此错误。在列出的每个尝试之后,我清理了项目,然后重建了项目。尝试了这些步骤后,错误并没有改变。

  • Update-Package
  • Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors,然后是Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors,然后是Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
  • 通过包管理器窗口将Microsoft.AspNet.WebApi.Cors 降级为v5.0.0.0

我还不是 .NET 方面的专家,这是第 4 次出现相同的错误,每次使用不同的程序集,因为我开始了一个新的空项目,并检查了 Web Api。我将z4a-foundation-scaffold-auth 包安装到我的项目中。我绝对会感谢您在这里对我的知识差距进行一些解释!

编辑:使用 ILDASM.exe 查看Microsoft.Owin.Cors 程序集。发现它在其清单定义中指定了System.Web.Cors v5.0.0.0。我想我现在的问题是如何解决这个问题?

【问题讨论】:

  • 使用 ILDASM.exe 检查其他依赖的 DLL 文件。必须至少有一个需要 System.Web.Cors v5.0.0.0 的 dll 文件
  • 好的,所以Microsoft.Owin.Cors 清单需要System.Web.Cors v5.0.0.0。我该如何解决这个问题?
  • 您是否已将程序集绑定重定向添加到 System.Web.Cors 的 web.config?基本上,只需将所有版本重定向到您安装到主应用程序中的最新版本。 msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx
  • 我已经从上面的 Web.config 中列出了绑定重定向。我认为问题在于Microsoft.Owin.Cors 程序集需要 System.Web.Cors 5.0,但我没有安装它。在我的 GAC 中安装它会解决问题吗?如果是这样,我该怎么做?

标签: c# asp.net .net asp.net-web-api .net-assembly


【解决方案1】:

原来 System.Web.Cors.dll 并非来自 Microsoft.AspNet.WebApi.Cors 包。它来自Microsoft.AspNet.Cors 包。

Install-Package Microsoft.AspNet.Cors -Version 5.0.0

这解决了直接错误。

如果您需要两个不同版本的 System.Web.Cors.dll,我建议您使用以下解决方案:

  1. 使用包管理器,将Microsoft.AspNet.Cors 的版本更改为Microsoft.Owin.Cors 在其清单定义中请求的版本。
  2. 使用 Visual Studio 的开发人员命令提示符(以管理员身份运行),导航到 *System.Web.Cors.dll** 所在的新版本 Microsoft.AspNet.Cors 的包文件夹。
  3. 运行以下命令:gacutil -i System.Web.Cors.dll
  4. 返回包管理器并将 Microsoft.AspNet.Cors 更改回您最初想要的版本。

此方法只是将所需版本的 .dll 文件拉入解决方案的包文件夹。然后使用gacutil.exe 将此版本的.dll 添加到您的全局程序集缓存中。 Visual Studio 首先在 GAC 中探测所需的 .dll 版本,然后在您的本地项目中。

【讨论】:

  • 我遇到了同样的问题,只是软件包已经安装好了。查看您的答案后,我使用Update-Package –reinstall Microsoft.AspNet.Cors 修复了它。
  • .dll 文件有下载吗?我无法使用 nuGet 包管理器
  • @Caleb Faruki 感谢分享。
【解决方案2】:

在 PM(包管理器)中运行此命令

安装包 Microsoft.AspNet.Cors -Version 5.2.3.0

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 2014-11-16
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多