无法加载文件或程序集System.Net.Http,版本= 4.0.0.0与ASP.NET(MVC 4)Web API OData预发行
问题
在安装Microsoft ASP.NET Web API OData包5.0.0-rc1 prerelease后,最终出现以下exception:
无法加载文件或程序集“System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。 定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的exception:0x80131040)
我的MVC 4项目是全新的,真的很小,没有什么奇特的。 我的目标是.NET框架4.5
我需要这个nuget包来实现使用Delta类的PATCH (当我使用包的版本4.0.0.0时,Delta类不工作)。
我该如何解决这个问题?
我的版本的System.Web.Http
在GAC中,我有5.0.0.0版本的System.Web.Http
gacutil -l System.Web.Http全局程序集caching包含以下程序集:System.Web.Http,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL
在Visual Studio中 ,当我浏览程序集时,给定版本的System.Web.Http是4.0.0.0 (为什么?)
在我的项目中 ,引用System.Web.Http
- 有版本5.0.0.0
- 指向包的\ lib \ net45 \文件夹
- 有CopyLocal = true
我试过的东西
我试图在Web.config中将redirectv 4.0.0.0绑定到5.0.0.0
<dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly>
但它给了我另一个例外:
尝试通过方法“System.Web.Http.GlobalConfiguration..cctor()”访问字段“System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2”失败。
我想v 4.0.0.0确实需要被核心的Web Api引擎使用。
链接的问题
代码分析错误无法在MVC4 Web API中 加载文件或程序集“System.Net.Http,Version = 2.0.0.0”无法 在MVC4 Web API中 加载文件或程序集“System.Net.Http,Version = 2.0.0.0
Visual Studio 2013有一个新function来处理这个问题。 在构build应用程序时,应该会看到有关正在引用的程序集的不同版本的警告。 双击该警告,将程序集绑定redirect添加到web.config。
有关更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/2fc472t2.aspx 。
jeff.eynon下面注意到,你需要签出web.config(如果使用TFS源代码pipe理)让VS自动编辑文件。 谢谢你的提示!
我通过使用nuget将WebApi包升级到预发布版本来实现它的工作:
PM> Microsoft.AspNet.WebApi -Pre
为了强制项目使用最新版本的WebApi,需要对根Web.config进行一些修改:
1)网页版本从2.0.0.0到3.0.0.0
<appSettings> <add key="webpages:Version" value="3.0.0.0" /> </appSettings>
2)绑定redirect到5.0.0.0为System.Web.Http和System.Net.Http.Formatting
<dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly>
我想就是这样
PS:从WebAPI OData 5.0 Beta高度启发的解决scheme- 访问GlobalConfiguration引发安全错误
我遇到了同样的问题,我通过将CopyLocal设置为true解决了以下问题:
System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll
我必须补充一点,我使用MVC4和NET 4
当我尝试从项目模板更新热毛巾项目时,以及在2013年10月23日创build了一个空项目并通过VS 2012中的nuget安装HotTowel时,我遇到了这个问题。
为了解决这个问题,我通过Nuget将Web Api Web Host和Web API软件包更新到了5.0版本,这是NuGet目前的版本(10/23/2013)。
然后我添加了绑定指示:
<dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly>
或者你可以从NuGet包pipe理器控制台执行此操作
Install-Package Microsoft.AspNet.WebApi -Version 5.0.0
然后你将能够添加对System.Web.Http.WebHost 5.0的引用
从你的引用中删除System.Web.Http和System.Net.Http.Formatting并通过浏览到你的bin文件夹(它们被nuget复制到的地方)添加引用现在文件版本是5.0.0.0
这个错误在几个不同的项目上popup了好几次。
我最终想到的是,当我构build时,我的bin文件夹中已经有一个system.web.mvc二进制程序集的副本。
要解决这个问题,右键单击引用列表中的程序集,然后select“属性”。 通过查看“Version”属性来检查这是否是最新版本。 如果是,则将“Copy Local”切换为true。
这将确保在您的项目中引用的版本是最终将在您的二进制文件夹中的版本。
如果仍然出现错误,请尝试运行nuGet以获取最新版本,然后再次尝试上述内容。
祝你好运 – 这个错误是一个痛苦!
我面临同样的错误。 当我安装dependency injectionUnity Framework时,我的configuration中添加了Http和HttpFormatter的新引用。 所以这里是我遵循的步骤。
我在nuGet包pipe理器控制台上运行以下命令:PM> Install-Package Microsoft.ASPNet.WebAPI -pre
并添加5.0版本的物理引用的DLL
我解决方式nuget。 你先安装nuget。 你使用的第二个。
插图如下:
第三:通过查看“版本”属性来检查这是否是最新版本。
最后:你检查项目再次有最新版本。
我遇到了同样types的问题,并按照以下步骤解决问题
转至工具 – >库程序包pipe理器 – >程序包pipe理器控制台并运行以下命令
安装程序包Microsoft.ASPNet.WebAPI -pre
如上所述修改了Web.config
文件中的引用之后,我们parsing了引用。
我正面临类似的问题。
对于我们来说,我们已经从Program Files引用了Microsoft.Data.Edm.dll
和OData.dll
以及其他程序集:
C:\Program Files (x86)\Microsoft WCF Data Services\5.0 \bin\.NETFramework\Microsoft.Data.Edm.dll
和
C:\Program Files (x86)\Microsoft WCF Data Services\5.0 \bin\.NETFramework\Microsoft.Data.OData.dll
版本是5.6.4 。
一旦我将两个程序集的引用更改为C:\....Project\packages\Microsoft.Data.Edm.5.6.0
,问题就解决了
进入nuget包pipe理器并更新我的包。 现在起作用了。 我更新的主要是Microsoft.AspNet.WebApi.Core。 可能需要在两个项目上同时执行正确的引用。
如果发生这个问题,请在下面的部分检查web.config
下面的部分给出了使用的特定dll的版本
在web.config中检查此部分之后,打开解决scheme资源pipe理器并从项目树中select参考,如图所示。 解决scheme浏览器 – >参考
扩展引用后,find导致错误的DLL。 右键单击dll参考,并检查版本,如上图所示。
如果configuration的DLL版本和引用的DLL不同,你会得到这个exception。 确保两者都是相同的版本,这将有所帮助。
这应该工作,我有同样的问题,并解决了这个问题:
我从官方的MSDN网站做了一个截图,因为我没有时间写一个正确的答案。