无法在当前目标框架.NET 4.0中解析System.Net.Http

问题描述 投票:14回答:2

将解决方案从Visual Studio 2010移动到2012后出现了一个令人讨厌的错误。构建很好,一切都运行完美localhost。我有一个新的MVC4项目需要.NET 4.5,所以我在构建服务器上安装了4.5框架。构建很好但是MSBuild无法将DotNetOpenAuth.Core.dll从其包位置复制到Bin目录。问题是因为,虽然特定项目的目标是4.0框架,但我相信MSBuild正在检查对.NET 4.5框架System.Net.Http程序集的依赖性,作为其CoreBuild的一部分。

警告代码=“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的框架版本,Version = 2.0.0.0,Culture = neutral,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
2个回答
28
投票

因此,即使我通过安装了DotNetOpenAuth软件包时添加的Nuget软件包复制System.Net.Http .NET 4.0,我的构建服务器上的MsBuild也检查了DotNetOpenAuth.Core依赖项并检查了计算机上安装的.NET程序集什么被复制到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,这就是为什么,我得到一个关于DotNetOpenAuth.Core.dll对System.Net.Http的依赖的警告,而不是得到System.Net.Http.dll for .NET 4.0目标的直接错误,可以找到但不适用于4.0框架作为项目的目标。

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.