安装 Microsoft ASP.NET Web API OData软件包5.0.0-rc1 预发布后,我最终遇到以下异常:
无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)
我的MVC 4项目是全新的,非常小,没什么特别之处。我的目标是.NET framework 4.5
我需要nuget package到implement PATCH using the Delta class (当我使用软件包的4.0.0.0版时,Delta类无法正常工作)。
我该如何解决?
在 GAC 中,我有版本 5.0.0.0 的System.Web.Http
gacutil -l System.Web.Http全局程序集缓存包含 以下程序集:System.Web.Http,Version = 5.0.0.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35, ProcessorArchitecture用于= MSIL
在 Visual Studio 中,当我浏览程序集时,给定版本的System.Web.Http是 4.0.0.0 (为什么?)
在 my project 中,引用System.Web.Http
我尝试在Web.config中将redirect v 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 $&LT;&GT; 9__CachedAnonymousMethodDelegate2' 失败。
我想v 4.0.0.0确实需要被核心Web Api引擎使用。
Code Analysis error Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API
答案 0 :(得分:163)
Visual Studio 2013有一项新功能可以解决这个问题。构建应用程序时,您应该看到有关正在引用的程序集的不同版本的警告。双击警告以将程序集绑定重定向添加到web.config。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/2fc472t2.aspx。
jeff.eynon在下面说明你需要检查web.config(如果使用TFS源代码控制)让VS自动编辑文件。谢谢你的提示!
答案 1 :(得分:39)
我通过使用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)将重定向绑定到5.0.0.0 for 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 - Accessing GlobalConfiguration throws Security Error
的高度启发答案 2 :(得分:11)
当我尝试从项目模板更新Hot Towel项目时以及在2013年10月23日创建一个空项目并通过nuget在VS 2012中安装HotTowel时,我遇到了这个问题。
为了解决这个问题,我通过Nuget将Web Api Web主机和Web API包更新到5.0,目前是NuGet中的当前版本(2013年10月23日)。
然后我添加了绑定指示:
<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>
答案 3 :(得分:11)
我遇到了同样的问题,我通过将以下libs的CopyLocal设置为true来解决它:
System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll
我必须补充一点,我使用MVC4和NET 4
答案 4 :(得分:8)
或者您可以从NuGet Package Manager控制台
执行此操作 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0
然后你就可以添加对System.Web.Http.WebHost 5.0的引用
答案 5 :(得分:4)
从您的引用中删除System.Web.Http和System.Net.Http.Formatting并通过浏览到bin文件夹(由nuget复制它们的位置)重新添加引用现在文件版本说5.0.0.0
答案 6 :(得分:1)
在几个不同的项目中多次弹出此错误。
我最终想到的是,当我构建时,我的bin文件夹中已经存在system.web.mvc二进制程序集的副本。
要解决此问题,请右键单击引用列表中的程序集,然后选择&#34; properties&#34;。通过查看&#34;版本&#34;检查这是否是最新版本。属性。如果是,请切换&#34;复制本地&#34;为真。
这将确保项目中引用的版本是最终位于二进制文件夹中的版本。
如果仍然出现错误,请尝试运行nuGet以获取最新版本,然后再次尝试上述内容。
祝你好运 - 这个错误很痛苦!答案 7 :(得分:1)
我遇到了同样的错误。当我安装Unity Framework for Dependency Injection时,我的配置中添加了Http和HttpFormatter的新引用。所以这是我遵循的步骤。
我在nuGet Package Manager控制台上运行了以下命令: PM&GT;安装包Microsoft.ASPNet.WebAPI -pre
并使用5.0版本添加了对dll的物理引用
答案 8 :(得分:1)
我通过nuget解决方法。你安装nuget的第一个。
你使用的第二个。
插图如下:
第三:通过查看&#34;版本&#34;检查这是否是最新版本。属性。
最终:你检查项目是否有最新版本。
答案 9 :(得分:0)
我遇到过相同类型的问题,并按照以下步骤解决了问题
转到工具 - &gt;库包管理器 - &gt;包管理器控制台并运行以下命令
安装包Microsoft.ASPNet.WebAPI -pre
答案 10 :(得分:0)
如上所述修改Web.config
文件中的引用后,我们解决了引用。
我遇到了类似的问题。
对于我们,我们引用了Microsoft.Data.Edm.dll
和OData.dll
以及Program Files中的其他程序集:
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
后,问题已解决
答案 11 :(得分:0)
进入nuget包管理器并更新我的包。现在它有效。我更新的主要是Microsoft.AspNet.WebApi.Core。可能需要对两个项目执行此操作以同步正确的引用。
答案 12 :(得分:0)
如果出现此问题,请查看以下部分中的web.config
Below section gives the version of particular dll used
在web.config中检查此部分后,打开解决方案资源管理器并从项目树中选择引用,如图所示。 Solution Explorer->Reference
扩展引用后,找到导致错误的dll。右键单击dll参考并检查版本,如上图所示。
如果config dll版本和引用的dll都不同,您将获得此异常。确保两者都是相同的版本,这将有所帮助。