Asp.net 无法加载文件或程序集';System.Net.Http,MVC4 Web API中的版本=2.0.0.0

Asp.net 无法加载文件或程序集';System.Net.Http,MVC4 Web API中的版本=2.0.0.0,asp.net,asp.net-mvc-4,asp.net-web-api,Asp.net,Asp.net Mvc 4,Asp.net Web Api,我有点奇怪的问题。 我用MVC4和新的Web API开发了一个应用程序,它在本地运行良好。 我在服务器上安装了MVC4并部署了应用程序。现在我得到以下错误: 无法加载文件或程序集“System.Net.Http,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100) 描述:执行当前web请求期间发生未处理的异常。请查看堆

我有点奇怪的问题。
我用MVC4和新的Web API开发了一个应用程序,它在本地运行良好。 我在服务器上安装了MVC4并部署了应用程序。现在我得到以下错误:

无法加载文件或程序集“System.Net.Http,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误及其来源的更多信息

有趣的是,我本地的包文件夹或ASP.Net MVC 4\Assemblys文件夹中的System.Net.Http版本是1.0.0.0。 实际上,我从我的项目中删除了对System.Net.Http的引用,但仍然收到相同的消息。我对它从哪里获得2.0.0.0引用有点困惑,为什么它可以在本地工作,但不能在服务器上工作

查看nuget依赖项:

ASP.NET WEb API核心库(测试版)取决于System.NET.Http.格式。
而System.Net.Http.Formatting取决于System.Net.Http。
我想这就是原因。但是我确实安装了这个包的2.0.20126.16343版本,只是里面的dll有1.0.0.0版本

我错过什么了吗

更新:


这是另一个ASP.NET应用程序的子应用程序,但另一个仍然基于WebForms。所以,有些事情搞砸了。但是,如果我在web.config中的assembly部分下进行了清理,甚至找不到应用程序本身。

在项目的References文件夹中,应该有对该dll的引用,并且版本应该是2.0.0.0。确保将其设置为Copy Local=true。然后确保它找到了你的服务器应用程序的bin文件夹

这是现在由nuget管理的库之一。所以打开Nuget,确保一切都是最新的。在您的项目包目录中,文件应位于以下位置:
\packages\System.Net.Http.2.0.20126.16343\lib\net40


您还可以尝试创建一个新的MVC4应用程序,并查看是否显示该应用程序的文件。

我在将我的应用程序部署到appharbor时遇到了相同的问题。问题是它还不支持.NET4.5。我所做的

  • 将我的项目切换到.NET4.0配置文件
  • 已卸载Web API NuGet软件包
  • 再次安装Web API(测试版)NuGet软件包
  • 已验证.csproj文件包含所有引用的程序集,因此它将始终从Bin文件夹而不是GAC中获取该文件

  • 在IIS 6.0上部署以前转换的(从.NET 4.5到4.0)web应用时,我遇到了相同的错误

    在web.configruntime部分,我找到了

    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
    </dependentAssembly>
    
    
    
    我改成了

    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>
    
    
    
    现在就像魅力一样工作。

    我的工作是:

    注意将1-4重定向到2.0

    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a"   culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>
    

    在我的例子中,我无意中通过NuGet向System.Net.Http 2.1.10.0版添加了一个依赖项。我无法在NuGet包管理器中摆脱它(因为其他包似乎依赖于它)。但是,这些软件包并不依赖于此特定版本。 以下是我为了摆脱它所做的工作(您也可以改用NuGet控制台(使用–force参数):

    • 将packages.config中的Microsoft.Net.Http版本从2.1.10.0更改为2.0.0.0
    • 在NuGet软件包管理器中卸载BCL可移植性包
    • 手动清除依赖库(System.Net.Http.*版本为2.1.10.0)
    • 添加对System.Net.Http 2.0.0.0的引用

    在文件配置I中删除了从属程序集:

    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
    <dependentAssembly>
    
    
    

    现在它工作正常。

    关闭项目,再次打开它。然后,使用Clean Solution+Build.works for me

    对于2.2.15.0版,我执行了以下操作:

    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.2.15.0"/>
    </dependentAssembly>
    

    我在一台测试服务器(Windows 2008 R2)上遇到了这个问题,据说该服务器已“准备好”进行部署;)

    提示是,当我检查我的开发机器和部署服务器之间的System.net版本时,它们不匹配

    使用以下步骤进行修复:

  • 从下载的.NET Framework 4.5独立安装程序

  • 在部署计算机上运行安装程序


  • 安装框架后,服务器需要重新启动,volla也是如此!我们可以走了

    我也有同样的问题!我查看了VS中的“警告”选项卡,发现我的一个nuget软件包间接引用了.NETFramework 4.5.0.0版。我必须卸载此软件包,然后重新安装4.0版本,但请确保指定支持4.0的软件包版本(如果在安装软件包时未指定,则默认返回4.5)。希望这有帮助

    我们正在使用VS 2013,创建了一个新的MVC 4 Web API,并且在TeamCity服务器上构建system.net.http.dll时遇到了一个问题,该版本不正确,但在安装了VS 2013的本地开发人员机器上构建得很好

    我们终于解决了这个问题

    当创建新的MVC 4 Web API并在项目创建时选择framework 4.0时,我们发现DLL的正确NuGet包版本被放入: ..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll

    但是,此项目的.csproj文件表示,此system.net.http.dll文件的路径为: ..\packages\Microsoft.Net.Http.2.0.30506.0\lib\net40\System.Net.Http.dll

    因此,当尝试构建时,is在此路径差异上失败,但在开发人员机器上的其他位置(而不是TeamCity构建服务器上)找到了文件的正确框架版本

    到目前为止,这是
         <Reference Include="System.Data.Entity" />
         <Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
           <Private>True</Private>
    +      <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
         </Reference>
         <Reference Include="System.Net.Http.WebRequest, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
           <Private>True</Private>
    +      <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
         </Reference>
         <Reference Include="System.Numerics" />
         <Reference Include="System.Security" />
    
    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
    <dependentAssembly>