无法加载文件或程序集&System; Web.Mvc' 。如何使用正确的参考文献?

时间:2015-09-19 13:08:10

标签: asp.net .net asp.net-mvc asp.net-mvc-5

我有一个基于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版本以指向正确的程序集?

4 个答案:

答案 0 :(得分:3)

在我的情况下,我通过更改配置上的PageControlsassemblyBinding元素以匹配当前版本的`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,从项目引用中选择程序集,如下所示:

enter image description here

注意:我正在回答一个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)

并获得有关版本绑定问题的指示,我执行了以下操作:Nuget Mvc Update

,此后工作非常顺利。

@Ahmed ,尽管如此,谢谢您指出了正确的方向

答案 2 :(得分:0)

就我而言,该应用程序在本地运行良好,但在其中一台服务器上无法正常运行。删除“ System.Web.Mvc”部分对我来说已解决了这个问题。

答案 3 :(得分:0)

从NuGet软件包中更新System.Web.Mvc的版本,它将正常运行。