可以';在调用Microsoft.Owin.Cors之后,无法加载System.Web.ors程序集

本文关键字:加载 System 程序集 ors Web 之后 Cors 调用 Owin Microsoft 可以 | 更新日期: 2023-09-27 18:28:07

在解决方案资源管理器中检查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
  • 通过Package Manager窗口将Microsoft.AspNet.WebApi.Cors降级为v5.0.0.0

我还不是.NET方面的专家,自从我在检查Web Api的情况下开始了一个新的空项目以来,这是每次使用不同的程序集时第四次出现相同的错误。我在我的项目中安装了z4a-foundation-scaffold-auth软件包。如果能在这里解释一下我的知识差距,我将不胜感激!

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

可以';在调用Microsoft.Owin.Cors之后,无法加载System.Web.ors程序集

原来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. 使用Package Manager,将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版本,然后在本地项目中探测。

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

安装包Microsoft.AspNet.Cors-版本5.2.3.0