调用 Microsoft.Owin.Cors 后无法加载 System.Web.Cors 程序集
Can't load System.Web.Cors assembly after call to Microsoft.Owin.Cors
当我在解决方案资源管理器中检查 System.Web.Cors
程序集引用时,Version
是 5.2.3.0。 Specific 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
- 通过包管理器 Window 将
Microsoft.AspNet.WebApi.Cors
降级为 v5.0.0.0
。
我还不是 .NET 方面的专家,这是自从我开始一个新的空项目并选中 Web Api
以来,每次都使用不同的程序集出现完全相同的错误的第 4 次。我将 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 的情况,我建议您采用以下解决方案:
- 使用包管理器,将
Microsoft.AspNet.Cors
的版本更改为 Microsoft.Owin.Cors
在其清单定义中请求的版本。
- 使用 Visual Studio 的开发人员命令提示符(运行 作为管理员),导航到新版本
Microsoft.AspNet.Cors
的包文件夹,其中 *System.Web.Cors.dll**居住。
- 运行 以下命令:
gacutil -i System.Web.Cors.dll
.
- 返回包管理器并将
Microsoft.AspNet.Cors
更改回您最初想要的版本。
此方法只是将所需版本的 .dll 文件提取到解决方案的包文件夹中。然后使用 gacutil.exe
将此版本的 .dll 添加到全局程序集缓存中。 Visual Studio 首先在 GAC 中探测所需的 .dll 版本,然后在您的本地项目中探测。
运行 这个命令进入 PM(包管理器)
安装包 Microsoft.AspNet.Cors - 版本 5.2.3.0
当我在解决方案资源管理器中检查 System.Web.Cors
程序集引用时,Version
是 5.2.3.0。 Specific 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
- 通过包管理器 Window 将
Microsoft.AspNet.WebApi.Cors
降级为v5.0.0.0
。
我还不是 .NET 方面的专家,这是自从我开始一个新的空项目并选中 Web Api
以来,每次都使用不同的程序集出现完全相同的错误的第 4 次。我将 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 的情况,我建议您采用以下解决方案:
- 使用包管理器,将
Microsoft.AspNet.Cors
的版本更改为Microsoft.Owin.Cors
在其清单定义中请求的版本。 - 使用 Visual Studio 的开发人员命令提示符(运行 作为管理员),导航到新版本
Microsoft.AspNet.Cors
的包文件夹,其中 *System.Web.Cors.dll**居住。 - 运行 以下命令:
gacutil -i System.Web.Cors.dll
. - 返回包管理器并将
Microsoft.AspNet.Cors
更改回您最初想要的版本。
此方法只是将所需版本的 .dll 文件提取到解决方案的包文件夹中。然后使用 gacutil.exe
将此版本的 .dll 添加到全局程序集缓存中。 Visual Studio 首先在 GAC 中探测所需的 .dll 版本,然后在您的本地项目中探测。
运行 这个命令进入 PM(包管理器)
安装包 Microsoft.AspNet.Cors - 版本 5.2.3.0