System.Net.Http 在目前目標框架 .NET 4.0 中無法解析
將解決方案從 Visual Studio 2010 移動到 2012 後出現嚴重錯誤。建構很好,一切正常 localhost。我有一個需要 .NET 4.5 的新 MVC4 項目,所以我在建構伺服器上安裝了 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”的框架版本,版本=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 框架。
因此,即使我通過安裝 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,這就是為什麼,我沒有收到關於 .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)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0
在我的建構伺服器上,MsBuild 能夠與正確版本的 System.Net.Htpp 進行比較,以進行 4.0 .NET 框架依賴項檢查。