.net 未能加载文件或程序集“System.Web.mvc”,如何使用正确的引用?

vybvopom  于 2023-05-19  发布在  .NET
关注(0)|答案(8)|浏览(465)

我有一个基于ASP.NETWeb表单构建的应用程序,它也支持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(Partial)WRN:为程序集提供了部分绑定信息:警告:程序集名称:System.Web.Mvc| Domain ID:1000000当只提供程序集显示名称的一部分时,将发生部分绑定。警告:这可能导致绑定器加载不正确的程序集。警告:建议为程序集提供完全指定的文本标识,警告:由简单名称、版本、区域性和公钥标记组成。警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270。LOG:Appbase = file:///C:/Users/Ahmed/Documents/Visual Studio 2013/Projects/MediaSoft/Project/c#/YuClone/YuClone/ LOG:初始PrivatePath = C:\Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\c#\YuClone\YuClone\bin调用程序集:(未知)=== LOG:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件: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\Framework\v4.0.30319\config\machine. config中的计算机配置文件。日志:策略此时未应用于引用(私有、自定义、部分或基于位置的程序集绑定)。日志:正在尝试下载新的URL文件:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22a49c5f/2f5ffeb9/System.Web.Mvc.DLL。日志:正在尝试下载新的URL文件:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22 a49 c5 f/2f 5 ffeb 9/System.Web. Mvc/System.Web.Mvc.DLL。日志:尝试下载新的URL文件:///C:/Users/Ahmed/Documents/Visual Studio 2013/Projects/MediaSoft/Project/c#/YuClone/YuClone/bin/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\Framework\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= 31 bf 3856 ad 364 e35日志:正在尝试下载新的URL文件:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22a49c5f/2f5ffeb9/System.Web.Mvc.DLL。日志:正在尝试下载新的URL文件:///C:/Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22 a49 c5 f/2f 5 ffeb 9/System.Web. Mvc/System.Web.Mvc.DLL。日志:尝试下载新的URL文件:///C:/Users/Ahmed/Documents/Visual Studio 2013/Projects/MediaSoft/Project/c#/YuClone/YuClone/bin/System. Web. Mvc. DLL。警告:比较程序集名称导致不匹配:次要版本错误:无法完成程序集的设置(hr = 0x 80131040)。探测终止。
以下是堆栈跟踪
[FileLoadException:未能加载文件或程序集“System.Web.Mvc”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT中的异常:0x80131040)]
[FileLoadException:未能加载文件或程序集“System.Web.Mvc,Version=5.2.3.0,Culture=neutral,PublicKeyToken= 31 bf 3856 ad 364 e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT中的异常:0x80131040)] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark& 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,Evidence assemblySecurity,StackCrawlMark& stackMark,IntPtr pPrivHostBinder,Boolean forIntrospection)+77
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection)+21 System.Reflection.Assembly.Load(String assemblyString)+28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName,Boolean starDirective)+38
[ConfigurationErrorsException:未能加载文件或程序集“System.Web.Mvc,Version=5.2.3.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT中的异常:0x80131040)]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName,Boolean 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& 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):未能加载文件或程序集“System.Web.Mvc,Version=5.2.3.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(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的版本以指向正确的程序集?

bvhaajcl

bvhaajcl1#

由于不正确的绑定而导致错误。我改了:

<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.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.0.0.0" />

现在它起作用了

lndjwyie

lndjwyie2#

好吧,这是 * 版本绑定 * 问题,对于现在进入这个***的用户来说,就像在***2019**中一样,比如说,VS 2017,( 当我遇到 * 时),正如OP所提到的:
如何升级System.Web.Mvc的版本以指向正确的程序集?
总是让nuget package manager为你做,根据你的项目.NET版本等安装正确的版本。
于是,我来到这里寻找我的问题:
未能加载文件或程序集“Bulletin”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT中的异常:0x80131040)
并得到了版本绑定问题的指示,我做了以下操作:

之后一切都很顺利

  • @Ahmed*,谢谢你指出正确的方向,虽然
0kjbasz6

0kjbasz63#

在我的例子中,我通过更改config中的PageControlsassemblyBinding元素来匹配当前版本的`System.Web.mvc,即www.example.com来解决这个5.2.4.0

页面控件

PageControls部分,将程序集“System.Web.Mvc”的所有匹配项中的版本替换为当前版本。:

<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元素处,将程序集的所有以前版本Map到当前版本,如下所示:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
  </dependentAssembly>

任何引用旧版本的包都使用此元素。

如何检查“System.Web.mvc'”的当前版本

您可以在properties选项卡中看到当前版本的System.Web.Mvc,从项目引用中选择程序集,如下所示:

注意:我回答的是一个2年前的问题,所以现在出现这个错误的原因可能会有所不同

mxg2im7a

mxg2im7a4#

在我的例子中,应用程序在本地工作正常,但在其中一台服务器上却不正常。删除“System.Web.mvc”部分为我解决了这个问题。

bprjcwpo

bprjcwpo5#

从NuGet包更新System.Web.Mvc的版本,它将正常工作。

ecbunoof

ecbunoof6#

只需从工具菜单中卸载并安装NuGet Packages中的 Microsoft.AspNet.Mvc

laik7k3q

laik7k3q7#

当我试图发布我的解决方案时,发现了此错误消息。问题的原因是'System.Web.Mvc'参考版本与我的'web.config'版本不相似。在我的例子中,在'web.config'中的参考版本是5.2.4.0,但在项目中是5.2.7.0
修复错误-
1.转到您的项目'References',然后找到'System.Web.Mvc'
1.右键单击它以查看属性。您将获得“System.Web.Mvc”版本号。
1.打开你的'web.config'文件,转到'system.web'代码块,在那里你会找到你的'System.Web.Mvc'版本。
1.如果您的web.config程序集版本与项目“References”版本不匹配。
1.从项目“引用”中删除“System.Web.Mvc”。
1.再次安装“System.Web.Mvc”,并确保安装的版本与web.config程序集版本相同。用于安装Microsoft. AspNet. Mvc的包管理器控制台命令示例。你需要在运行命令的时候把你想要的版本号放在-
安装包Microsoft.AspNet.Mvc -版本5.2.4.0
我不知道这对你是否有用。但那是我的工作。谢谢

huwehgph

huwehgph8#

Ahmed Mujtaba的解决方案在我将newVersion(back)更改为www.example.com时很有效4.0.0.0

相关问题