无法加载文件或程序集System.Web.Http,版本为5.2.2.0。

32

我刚刚将一个Asp.Net Web Api 2.2项目上传到生产服务器,但是我得到了标题中所述的错误。

在我的Web.config文件中,我已经有了这个:

 <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>
文件确实存在于bin目录中。是什么导致了这种情况?我的所有Asp.Net Web API文件都是最新的,版本显示为5.2.2。在我的开发机器上它运行良好。

在添加WebAPI CORS之前,请检查we.http版本(****),使用第一个neget包PM> Install-Package Microsoft.AspNet.WebApi.Cors添加webcofiq-使用旧的正确版本<dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-(****)" newVersion="5.2.2.0" /> </dependentAssembly> - K.L Sathish
9个回答

47

System.Web.HttpSystem.Web.Http.WebHost程序集的属性中将Copy Local设置为true,然后重新部署包。

如果这不能完全解决您的问题,请尝试重新安装NuGet包。这将有望纠正损坏的依赖项。从包管理控制台运行以下命令:

Update-Package Microsoft.AspNet.WebApi -reinstall

确保同时安装System.Web.Http.WebHost


3
重新安装解决了我的问题。 - Fabio S.

12
对我来说,从“解决方案资源管理器”中,我检查了项目引用中“System.Web.Http”的版本,它是5.2.3.0,所以在web.config中,我做了更改:

<bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> 
<bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.3.0" />

然后构建。这对我有用!


大家注意了,这个版本最近已经更改,所以您需要转到5.2.4.0进行重定向。否则,这就是正确的答案(尽管我认为您需要在第二行中编辑旧版本为“0.0.0.0-5.2.3.0”)。 - The Senator
1
拯救了我的一天!谢谢。 - Sapan Ghafuri
这对我解决了问题。但是还没有绑定重定向。我添加了它,问题得到了解决。 - Alexander

4
在web.config中添加以下配置解决了我的问题。
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.5.0" />
  </dependentAssembly>

1
如果您在全局程序集缓存中有一个不同版本的程序集,它将始终被加载,而不是来自 bin 文件夹的程序集。

这完全是不正确的。他发布的dependentAssembly配置确保了这一点。 - Mihai Dinculescu
这是不正确的。如果您在GAC中有一个程序集并且另一个在文件系统上,名称和公钥相同,尝试加载其字节,但无论如何,您始终会加载来自GAC的程序集。试试看。 - Ricardo Peres

1

我将问题解决分为以下步骤:

  1. 停止远程Web服务器上的站点
  2. 清理网站文件夹
  3. 重新发布它
  4. 启动站点

一键发布未替换正确版本的dll,或远程站点正在使用该文件。


1
  • 确保您在项目中引用的是正确版本的System.web.http(检查web.config)。
  • 如果引用中没有System.web.http,请尝试使用NuGet安装它。
  • 如果以上两点在本地都正确,则尝试从包管理器控制台还原您的NuGet。

0

我遇到了完全相同的错误。它是由我使用的一个脚本引起的,该脚本用于部署应用程序并替换了Web.config为先前的版本。Web.config指定了错误的System.Web.Http版本。删除该步骤解决了问题。


-1

听起来很傻,但在我的情况下重新启动Visual Studio帮了我。


-4

另一种不需要新建或使用Nuget更新/重新安装的方法是在config.web中执行以下操作:

对于您遇到问题的dll,请执行以下操作:

&lt;bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.2.0"&gt;

今天我遇到了一个问题,这个小调整解决了它...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接