将解决方案从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框架。
答案 0 :(得分: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,那个这就是为什么我没有得到System.Net.Http.dll for .NET 4.0目标不存在的直接错误,而是收到了关于DotNetOpenAuth.Core.dll对System.Net.Http的依赖的警告,可以找到但是不适用于项目所针对的4.0框架。
我只是将System.Net.Http .NET 4.0 DLL从包中复制到
C:\ Program Files(x86)\ Reference 组件\微软\框架\ .NETFramework \ V4.0
在我的构建服务器上,MsBuild能够与正确的版本System.Net.Htpp进行比较,以便进行4.0 .NET框架依赖性检查。
答案 1 :(得分:1)
如果此操作失败,您可能还需要应用.Net v4.5.1 开发包,因为它支持多个定位。我安装了4.5.1并复制了程序集,但仍然出现此错误。从http://www.microsoft.com/en-us/download/details.aspx?id=40772安装开发包修复了此问题,现在在server 2012 r2下构建。