我有一个基于ASP.NET Web表单构建的应用程序,它也支持MVC 5.我在我的项目中包含了MVC 5 API控制器,我必须将Json从4.5版升级到7.0版。在我启动应用程序后进行这些更改后,出现以下错误:
无法加载文件或程序集&System; Web.Mvc'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)
我查看了System.Web.Mvc
的参考资料。在属性对话框中,运行时版本为v4.0.30319
,版本为5.0.0.0
。在web.config中,程序集设置如下:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AntiXssLibrary" publicKeyToken="d127efab8a9c114f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<!--<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>-->
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
完整的错误日志如下所示:
===预绑定状态信息===日志:DisplayName = System.Web.Mvc(部分)WRN:提供了部分绑定信息 assembly:WRN:程序集名称:System.Web.Mvc |域ID:2 WRN:A 仅部分程序集显示名称为时发生部分绑定 提供。警告:这可能导致活页夹加载不正确 部件。警告:建议提供完全指定的文本 程序集的身份,WRN:由简单名称组成, 版本,文化和公钥令牌。警告:见白皮书 http://go.microsoft.com/fwlink/?LinkId=109270了解更多信息和 这个问题的常见解决方案。日志:Appbase = file:/// C:/ Users / Ahmed / Documents / Visual Studio 2013 / Projects / MediaSoft / Project / c#/ YuClone / YuClone / LOG:Initial PrivatePath = C:\ Users \ Ahmed \ Documents \ Visual Studio 2013 \ Projects \ MediaSoft \ Project \ c#\ YuClone \ YuClone \ bin调用 汇编:(未知)。 ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C:\ Users \ Ahmed \ Documents \ Visual Studio 2013 \ Projects \ MediaSoft \ Project \ c#\ YuClone \ YuClone \ web.config日志: 使用主机配置文件: C:\ Users \ Ahmed \ Documents \ IISExpress \ config \ aspnet.config日志:使用 来自的机器配置文件 C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。 日志:此时政策未适用于参考(私人, 自定义,部分或基于位置的程序集绑定)。日志:正在尝试 下载新的URL file:/// C:/ Users / Ahmed / AppData / Local / Temp / Temporary ASP.NET 文件/根/ 22a49c5f / 2f5ffeb9 / System.Web.Mvc.dll程序。日志:正在尝试 下载新的URL file:/// C:/ Users / Ahmed / AppData / Local / Temp / Temporary ASP.NET 文件/根/ 22a49c5f / 2f5ffeb9 / System.Web.Mvc / System.Web.Mvc.dll程序。日志: 试图下载新的URL文件:/// C:/ Users / Ahmed / Documents / Visual 工作室 2013 /项目/ MediaSoft /项目/ C#/ YuClone / YuClone /斌/ System.Web.Mvc.dll程序。 日志:使用应用程序配置文件: C:\ Users \ Ahmed \ Documents \ Visual Studio 2013 \ Projects \ MediaSoft \ Project \ c#\ YuClone \ YuClone \ web.config日志: 使用主机配置文件: C:\ Users \ Ahmed \ Documents \ IISExpress \ config \ aspnet.config日志:使用 来自的机器配置文件 C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。 日志:在应用程序配置文件中找到重定向:5.0.0.0 重定向到5.2.3.0。日志:政策后参考:System.Web.Mvc, Version = 5.2.3.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 LOG: 试图下载新的URL file:/// C:/ Users / Ahmed / AppData / Local / Temp / Temporary ASP.NET 文件/根/ 22a49c5f / 2f5ffeb9 / System.Web.Mvc.dll程序。日志:正在尝试 下载新的URL file:/// C:/ Users / Ahmed / AppData / Local / Temp / Temporary ASP.NET 文件/根/ 22a49c5f / 2f5ffeb9 / System.Web.Mvc / System.Web.Mvc.dll程序。日志: 试图下载新的URL文件:/// C:/ Users / Ahmed / Documents / Visual 工作室 2013 /项目/ MediaSoft /项目/ C#/ YuClone / YuClone /斌/ System.Web.Mvc.dll程序。 警告:比较程序集名称导致不匹配:次要 版本错误:无法完成装配设置(hr = 0x80131040)。 探测终止。
以下是堆栈跟踪
[FileLoadException:无法加载文件或程序集&#39; System.Web.Mvc&#39; 或其中一个依赖项。定位程序集的清单定义 与装配参考不匹配。 (HRESULT的例外情况: 0x80131040)]
[FileLoadException:无法加载文件或程序集&#39; System.Web.Mvc, Version = 5.2.3.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35&#39;要么 其中一个依赖项。定位程序集的清单定义 与装配参考不匹配。 (HRESULT的例外情况: 0x80131040)] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder, Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+36
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,Evidence assemblySecurity,RuntimeAssembly reqAssembly, StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+152
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, 证据集合安全,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean forIntrospection)+77
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, 证据集合安全,StackCrawlMark&amp; stackMark,布尔 forIntrospection)+21 System.Reflection.Assembly.Load(String assemblyString)+28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔starDirective)+38[ConfigurationErrorsException:无法加载文件或程序集 &#39; System.Web.Mvc,Version = 5.2.3.0,Culture = neutral, 公钥= 31bf3856ad364e35&#39;或其中一个依赖项。该 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT异常:0x80131040)]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔starDirective)+738
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +217 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)+130
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)+170
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +92 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath,Boolean&amp; isRefAssemblyLoaded)+290
System.Web.Compilation.BuildManager.ExecutePreAppStart()+157
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory,HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel,Exception appDomainCreationException)+531[HttpException(0x80004005):无法加载文件或程序集 &#39; System.Web.Mvc,Version = 5.2.3.0,Culture = neutral, 公钥= 31bf3856ad364e35&#39;或其中一个依赖项。该 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT异常:0x80131040)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+9924184 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest) wr,HttpContext context)+261
如何升级System.Web.Mvc版本以指向正确的程序集?
答案 0 :(得分:3)
在我的情况下,我通过更改配置上的PageControls
和assemblyBinding
元素以匹配当前版本的`System.Web.Mvc来解决,这是5.2.4.0
<强> PageControls 强>
在PageControls
部分替换当前版本的程序集&#34; System.Web.Mvc&#34;的所有出现次数中的版本。:
<pages controlRenderingCompatibilityVersion="4.0" validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc"/>
</controls>
<强> assemblyBinding 强>
在assemblyBinding
元素处将所有以前版本的程序集映射到当前版本,如下所示:
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
</dependentAssembly>
这个元素被任何包引用旧版本。
如何查看&#39; System.Web.Mvc&#39;
的当前版本您可以在属性选项卡中看到当前版本的System.Web.Mvc
,从项目引用中选择程序集,如下所示:
注意:我正在回答一个2岁的问题,因此现在出现此错误的原因可能不同
答案 1 :(得分:3)
好吧,这是版本绑定的关注点,对于用户来说,进入 now 就像在 2019 < / em> ,例如, VS 2017 ,(我遇到的),OP提到:
如何升级System.Web.Mvc的版本以指向正确的 组装?
始终让nuget package manager
为您完成此操作,以根据您的项目.NET
的版本等安装正确的版本。
从那时起,我到达这里搜索我的问题:
无法加载文件或程序集'System.Web.Mvc,Version = 5.2.4.0, 文化=中性,PublicKeyToken = 31bf3856ad364e35'或其中之一 依赖性。找到的程序集的清单定义不 匹配程序集参考。 (来自HRESULT的异常:0x80131040)
,此后工作非常顺利。
@Ahmed ,尽管如此,谢谢您指出了正确的方向
答案 2 :(得分:0)
就我而言,该应用程序在本地运行良好,但在其中一台服务器上无法正常运行。删除“ System.Web.Mvc”部分对我来说已解决了这个问题。
答案 3 :(得分:0)
从NuGet软件包中更新System.Web.Mvc
的版本,它将正常运行。