Could not load file or assembly 'System.Web.Http 4.0.0 after update from 2012 to 2013
我是根据升级的。http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-和-web-api-project-to-aspnet-mvc-5-和-web-api-2
我得到错误。其他人有这个错误吗?
Server Error in '/' Application.
Could not load file or assembly 'System.Web.Http, Version=4.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)
Description: An unhandled exception occurred during the execution of
the current web request. Please review the stack trace for more
information about the error and where it originated in the code.Exception Details: System.IO.FileLoadException: Could not load file
or assembly 'System.Web.Http, Version=4.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 Error:
Line 48: Line 49: Line 50: } Line
51: Line 52: protected void Application_BeginRequest(object
sender, EventArgs e)Source File:
d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs Line:
50Assembly Load Trace: The following information can be helpful to
determine why the assembly 'System.Web.Http, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be loaded.=== Pre-bind state information === LOG: DisplayName = System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified) LOG: Appbase =
file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: Initial
PrivatePath = D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin
Calling assembly : ThirdPartyWebAPI, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null.
=== LOG: This bind starts in default load context. LOG: Using application configuration file:
D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\web.config LOG: Using
host configuration file:
C:\Users\michalc\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.Http, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35 LOG: Attempting
download of new URL
file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary
ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http.DLL. LOG:
Attempting download of new URL
file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary
ASP.NET
Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL. LOG:
Attempting download of new URL
file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major
Version ERR: Failed to complete setup of assembly (hr = 0x80131040).
Probing terminated.Stack Trace:
[FileLoadException: Could not load file or assembly 'System.Web.Http,
Version=4.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)] ThirdPartyWebAPI.WebApiApplication.Application_Start()
in d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs:50[HttpException (0x80004005): Could not load file or assembly
'System.Web.Http, Version=4.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)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext
context, HttpApplication app) +9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr
appContext, HttpContext context, MethodInfo[] handlers) +118
System.Web.HttpApplication.InitSpecial(HttpApplicationState state,
MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr
appContext, HttpContext context) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr
appContext) +296[HttpException (0x80004005): Could not load file or assembly
'System.Web.Http, Version=4.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)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9913572
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)
+101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest
wr, HttpContext context) +254
版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.18408
我通过重新安装nuget包修复了这个问题,该包纠正了损坏的依赖项。从包管理器运行:
1 | Update-Package Microsoft.AspNet.WebApi -reinstall |
若要解决无法加载文件或程序集"system.web.http"错误,请使用nuget安装Web API 2.1 WebHost。
在解决方案资源管理器的"参考"中,右键单击并选择"管理Nuget包"。(如果没有,安装Nuget)
在左侧的"管理Nuget包"窗口中,单击"联机",然后在右上角搜索Web主机并安装Microsoft ASP.NET Web API 2.1 Web主机。(安装后,安装按钮将变为绿色检查)
之后,项目将重新加载,当再次生成时,错误将得到解决,项目将调试并运行。错误将消失,您可能是"找不到资源"。只需附加URL(例如从localhost:52088/到localhost:52088API/产品)
你的问题很好,帮助了我。
希望这个答案有帮助!
您需要添加程序集重定向:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <configuration> .... <runtime> <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> ... </configuration> |
最有可能的情况是,您需要为更多的程序集(如WebHosting等)执行此操作。
或者您可以从Nuget Package Manager控制台执行此操作
1 | Install-Package Microsoft.AspNet.WebApi -Version 5.0.0 |
然后您就可以添加对system.web.http.webhost 5.0的引用了。
当我安装Web API 2.2帮助时,此错误开始。我把这个添加到web.config中,它解决了我的问题。
1 2 3 4 | <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> </dependentAssembly> |
我只是简单地将缺失的组件设置为
然后,这应该解决一个问题,因为可能有多个程序集导致该问题-我所做的是选择所有程序集并右键单击它们;选定的属性;并将它们全部设置为"复制本地=真";然后重新发布。
对我来说,它只是在生产环境中崩溃,而不是在本地计算机上;解决这个问题的方法是删除/bin文件夹的内容,然后重新生成它。
解决此问题的正确方法是遵循以下步骤
. 如果您的版本较旧,请将Visual Studio更新为15.5.4(可选)
从web.config中删除所有绑定重定向
将此添加到csproj文件:
1
2
3
4 <PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
建造。
在bin文件夹中,应该有一个
它应该有重定向。将这些复制到web.config
再次从csproj文件中删除上述截图
它应该工作
这可能对某人有所帮助。
我决定使用MVC4应用程序。
运行项目,已工作
然后安装了一些软件包,如Microsoft ASP.NET Web API 2.2(4个软件包)Microsoft ASP.NET Web API 2.2帮助页Microsoft ASP.NET Web API 2.2 OWIN
运行项目,与问题中提到的相同错误
解决方案:
在Web.CONFIG中
1 2 3 4 5 6 7 8 | <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" /> </dependentAssembly> <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" /> </dependentAssembly> |
问题解决
但后来发现了一些修补程序错误,要解决这个问题,转到MVC4项目的"查看"文件夹,找到
1 2 3 4 5 6 | <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> |
只是一个明显但可能有用的提示……请记住检查您在webconfig程序集绑定中指定的新版本是否与您在项目引用中引用的版本相同。(我写这篇文章的时候,如果你最近在system.web.http上做了一个nuget,这个值是5.1.0.0)
在我的例子中,我实际上完全错过了我的
1 2 3 4 5 6 7 8 9 | Installing NuGet package ASP.NET.MVC solved the issue for me. To install package. - Right click on project - Select"Manage NuGet Packages" - Select Online->Nuget.org from left menu - select"Microsoft ASP.NET MVC" - Click Install If you have already installed package earlier, please update the package by selecting Updates from left menu and then selecting"Microsoft ASP.NET" and click Update. |
1 2 3 4 5 6 7 8 | <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> |
我找到了解决办法!删除项目目录中名为package的文件夹,然后重新生成以运行它。
对!!!!
1 | Install-Package Microsoft.AspNet.WebApi -Version 5.0.0 |
在我的情况下,它工作得很好……thnkz
我什么也没有,只是复制开发bin文件夹dlls到在线部署bin文件夹,它对我来说很好。
我可以通过在主应用程序的app.config中添加程序集引用来解决与system.net.http类似的问题。
1 2 3 4 5 6 | <runtime> <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" /> </dependentAssembly></runtime> |
将引用中的dll的特定版本标志从true更改为false
我通过恢复nuget在运行
1 2 3 4 | <dependentAssembly> <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> </dependentAssembly> |
我是从WCF服务那里得到的。对于我(正如在本地开发人员中显示的问题一样),我只需要删除解决方案下bin文件夹的内容。重建工作再次顺利进行。
ASP.NET版本:4.0.30319.18408属于.net4.5,System.Web.HTTP版本=4.0.0.0与.net4.0兼容。所以您拥有的版本不兼容。您应该将system.web.http更新到与.net4.5兼容的5.0.0.0版本。
我也有同样的问题,重新安装程序包不起作用。
我的应用程序在本地(而不是IIS Express)中运行。我启用了程序集加载跟踪,发现它需要从低于温度的catch加载system.web.http。因此,删除其中的所有catch文件夹。
C:WindowsMicrosoft.NETFrameworkv4.0.30319临时ASP.NET文件[我的应用程序]
正如其他人所说,只需使用nuget将MVC包重新安装到Web项目中,但一定要将MVC包添加到任何依赖于Web项目的项目中,例如单元测试。如果您单独构建每个包含的项目,您将看到witch项目需要更新。
我也有类似的问题。以前一切都正常。它最初是使用Web表单制作的,后来又为一些东西添加了Web API。
- 已尝试卸载、安装和重新安装Microsoft.aspnet.WebAPI包。
- 尝试从解决方案中删除packages文件夹,并让nuget在vs.
- 尝试删除单个程序集引用(在"引用"下)并重新安装包。
- 尝试在几个答案中提到的web.config中添加绑定重定向到5.2.3.0版本。对我来说没什么用。
在Visual Studio中,将发布配置文件设置从"发布"更改为"调试"。很奇怪,但这才起作用。所以在这里分享。
我在使用发布功能部署到Azure时遇到了这个问题。记住在目的地清除文件。
这解决了我的问题,以防人们像我一样四处寻找。我的项目/解决方案中的所有内容都是相同的版本,只是在我部署到的目的地不一样。
如果在一个解决方案中使用多个项目,并将一个项目中的方法调用到另一个项目,请确保所有项目(称为项目和调用方项目)都使用唯一的
解决这个问题的方法是重新安装Microsoft ASP.NET Web API 2.2帮助页和Microsoft ASP.NET Web API 2.2 OWIN包。我同时重新安装了两个,但我认为是前者解决了这个问题。
我尝试了这里提供的前几个解决方案,但没有帮助,然后我将我的依赖项与一个项目中的那些(从一个关于复数的课程)进行了比较,上面的两个依赖项是一个较低的版本(5.0.0),因此我将它们更新到5.2.3,然后它开始工作。