我已经将我的项目复制到一台干净的Windows 10机器上,只安装了Visual Studio 2015 Community和SQL Server 2016 Express。除了Windows 10和VS2015或SQL Server安装的框架版本外,没有安装其他框架版本。

当我尝试启动WebApi项目时,我得到了这样的消息:

无法加载文件或程序集"System.Net。Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统无法找到指定的文件。

项目包包括:

<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />

在使用。net Framework 4.6.1构建项目后,在bin文件夹中找不到System.Net.Http文件。

文件的路径指向:

C:\Program Files (x86)\Reference程序集\Microsoft\ framework.net框架\v4.6.1\System.Net.Http.dll

System.Net.Http.Formatting的文件路径指向:

C: \开发\ MyApp \ \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll包

整个项目应该以4.5.1为目标,还是有其他方法来引用正确的程序集?


当前回答

这将在。net 4.7.2和Visual Studio 2017(15.9.4)中工作:

删除web /应用程序。配置绑定重定向 删除System.Net.Http的NuGet包 打开“添加新引用”,直接链接到。net 4.7.2附带的4.2.0.0版本

其他回答

对我来说,唯一干净利落地解决这个问题的方法。NET 4.6.1)不仅为实际使用System.Net的项目添加了对System.Net.Http V4.3.4的Nuget引用。Http,但也启动项目(在我的情况下是一个测试项目)。

(这很奇怪,因为正确的System.Net.Http.dll存在于测试项目的bin目录中,.config assemblyBingings看起来也不错。)

上面的绑定-重定向对我不起作用,所以我在web.config中注释掉了对System.Net.Http的引用。没有它,一切似乎都可以正常工作。

  <system.web>
    <compilation debug="true" targetFramework="4.7.2">
      <assemblies>
        <!--<add assembly="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />-->
        <add assembly="System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.7.2" />
  </system.web>

4.6.1-2在VS2017中,用户可能会遇到他们的System.Net.Http版本被VS2017或Msbuild 15想要使用的版本替换。

我们在这里删除了这个版本:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll

在这里:

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll

然后用我们通过NuGet引用的版本构建项目。

更改我的网页中的绑定信息。config(或app.config) -虽然在我看来是一个“黑客”,允许你在NuGet包更新后继续你的项目,并给你System.Net.Http错误。

设置oldVersion="0.0.0.0-4.1.1.0"和newVersion="4.0.0.0"如下所示

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

开放网络。配置并删除<runtime>,包括其中的所有内容 < * *运行时> < assemblyBinding xmlns = " urn: schemas-microsoft-com: asm。v1 " > < /运行时> 保存并关闭Web.config 打开Package Manager Console,执行该命令 Add-BindingRedirect

当我的团队成员从。net Framework 4.6.1升级到。net Framework 4.8,从VS 2017升级到VS 2022时,这解决了我的问题