调用Microsoft.Owin.Cors后无法加载System.Web.Cors程序集

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

我的Web.config

     

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

   

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 。 我想我现在的问题是如何解决这个问题?

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

此方法只是将所需的.dll文件版本提取到Solution的packages文件夹中。 然后使用gacutil.exe将此版本的.dll添加到全局程序集缓存中。 Visual Studio首先在GAC中探测所需的.dll版本,然后在本地项目中进行探测。

将此命令运行到PM(包管理器)

安装包Microsoft.AspNet.Cors -Version 5.2.3.0