【问题标题】:System.Net.Http could not be resolved in the currently targeted framework .NET 4.0System.Net.Http 在当前目标框架 .NET 4.0 中无法解析
【发布时间】:2013-05-21 07:22:36
【问题描述】:

将解决方案从 Visual Studio 2010 移动到 2012 后出现严重错误。构建很好,一切正常,本地主机运行良好。我有一个需要 .NET 4.5 的新 MVC4 项目,所以我在构建服务器上安装了 4.5 框架。构建很好,但 MSBuild 无法将 DotNetOpenAuth.Core.dll 从其包位置复制到 Bin 目录。问题在于,尽管特定项目以 4.0 框架为目标,但我相信 MSBuild 正在检查对 .NET 4.5 框架 System.Net.Http 程序集的依赖关系,作为其 CoreBuild 的一部分。

warning code="MSB3268" 主要参考 \packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll" 无法解析,因为它间接依赖于框架程序集" System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 在当前目标框架中无法解决。".NETFramework,Version=v4.0"。要解决此问题,请删除参考“c:\cc\kazork\code\trunk\src\packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll”或将您的应用程序重新定位到包含“System. Net.Http,版本=2.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a

这是我的包配置:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ChardinJs" version="1.0.3" targetFramework="net40" />
  <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
  <package id="DotNetOpenAuth.AspNet" version="4.3.0.13117" targetFramework="net40" />
  <package id="DotNetOpenAuth.Core" version="4.3.0.13117" targetFramework="net40" />
  <package id="DotNetOpenAuth.OAuth.Consumer" version="4.3.0.13117" targetFramework="net40" />
  <package id="DotNetOpenAuth.OAuth.Core" version="4.3.0.13117" targetFramework="net40" />
  <package id="DotNetOpenAuth.OpenId.Core" version="4.3.0.13117" targetFramework="net40" />
  <package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.3.0.13117" targetFramework="net40" />
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
  <package id="flexigrid" version="1.1.0" targetFramework="net40" />
  <package id="jQuery" version="1.9.1" targetFramework="net40" />
  <package id="Microsoft.AspNet.FriendlyUrls.Core" version="1.0.0" targetFramework="net40" />
  <package id="Microsoft.AspNet.Membership.OpenAuth" version="1.0.1" targetFramework="net40" />
  <package id="Microsoft.AspNet.SignalR.Core" version="1.1.1" targetFramework="net40" />
  <package id="Microsoft.AspNet.SignalR.JS" version="1.1.1" targetFramework="net40" />
  <package id="Microsoft.AspNet.SignalR.Owin" version="1.1.1" targetFramework="net40" />
  <package id="Microsoft.AspNet.SignalR.SystemWeb" version="1.1.1" targetFramework="net40" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net40" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="1.0.1" targetFramework="net40" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
  <package id="Newtonsoft.Json" version="5.0.5" targetFramework="net40" />
  <package id="Owin" version="1.0" targetFramework="net40" />
  <package id="PayPalCoreSDK" version="1.1.1" targetFramework="net40" />
  <package id="PayPalMerchantSDK" version="2.3.98" targetFramework="net40" />
  <package id="Select2.js" version="3.3.2" targetFramework="net40" />
  <package id="toastr" version="1.2.2" targetFramework="net40" />
  <package id="Twitter.Bootstrap" version="2.3.2" targetFramework="net40" />
  <package id="WebGrease" version="1.3.0" targetFramework="net40" />
</packages>

我引用了 System.Net.Http 并将其复制到 bin。有问题的项目针对 4.0 框架。我的版本 System.Net.Http 是针对 4.0 框架的。

【问题讨论】:

    标签: asp.net asp.net-mvc msbuild cruisecontrol.net


    【解决方案1】:

    因此,即使我通过安装 DotNetOpenAuth 包时添加的 Nuget 包复制 System.Net.Http .NET 4.0,我的构建服务器上的 MsBuild 仍在检查 DotNetOpenAuth.Core 依赖项并检查安装在机器不是被复制到 Bin 的东西。就我而言:

    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
    

    我的中没有 System.Net.Http 程序集

    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
    

    目录,所以我相信 MsBuild 试图在我的机器上查看新安装的 .NET 4.5 程序集..\Assemblies\Microsoft\Framework.NETFramework\v4.5 那里有一个 System.Net.Http.dll 并且这就是为什么,我没有收到关于 .NET 4.0 目标的 System.Net.Http.dll 不存在的彻底错误,而是收到关于 DotNetOpenAuth.Core.dll 对 System.Net.Http 的依赖的警告,可以找到但不适用于项目所针对的 4.0 框架。

    我只是将 System.Net.Http .NET 4.0 DLL 从包中复制到

    C:\Program Files (x86)\参考 程序集\Microsoft\Framework\.NETFramework\v4.0

    在我的构建服务器上,MsBuild 能够与正确版本的 System.Net.Htpp 进行比较,以进行 4.0 .NET 框架依赖性检查。

    【讨论】:

    • 你找到真正的问题了吗?我真的认为你在你的包文件夹中的 dll 没有被使用是很奇怪的。我有完全相同的问题,但是复制 system.net.http 文件没有帮助。
    • 是的,这就是解决我的问题的原因。
    • 从 .net 4.5 降级到 4.0 后,我的构建停止工作。在我的情况下,System.Net.Http 和 System.Web.Http 都从构建服务器上的 .NETFramework\v4.0 文件夹中丢失。感谢您分享您的解决方案!
    • 没问题!!很高兴能帮到你,这是一个非常痛苦的错误!
    • 多么痛苦的错误,伙计。我正在疯狂地打墙并重建项目,就像一个疯子试图弄清楚裂缝是怎么回事。我还复制了System.Net.Http.WebRequest.dll。谢谢!它就像一个魅力,没有可怕的警告标志。
    【解决方案2】:

    如果失败,您可能还需要应用 .Net v4.5.1 开发包,因为它支持多个定位。我安装了 4.5.1 并复制了程序集,但仍然出现此错误。从http://www.microsoft.com/en-us/download/details.aspx?id=40772 安装开发包修复了这个问题,现在在服务器 2012 r2 下构建。

    【讨论】:

    • 试过了,完全擦除工作区后不起作用
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多