Подтвердить что ты не робот

System.Net.Http не удалось разрешить в целевой среде .NET 4.0

Появилась неприятная ошибка после перемещения решения из Visual Studio 2010 до 2012 года. Build отлично, и все работает отлично на локальном хосте. У меня есть один новый проект MVC4, для которого требуется .NET 4.5, поэтому я установил структуру 4.5 на сервере сборки. Сборка хорошо, но MSBuild не копирует DotNetOpenAuth.Core.dll из своего местоположения пакета в каталог Bin. Проблема в том, что, хотя конкретный проект нацелен на фреймворк 4.0, я считаю, что MSBuild проверяет зависимость от сборки .NET.Net 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 "или перенастроить приложение в версию фреймворка, содержащую" Систему. 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, и она копируется в корзину. Этот проект нацелен на платформу 4.0. Моя версия System.Net.Http предназначена для платформы 4.0.

4b9b3361

Ответ 1

Итак, несмотря на то, что я копировал System.Net.Http.NET 4.0 через пакет Nuget, который добавляется при установке пакетов DotNetOpenAuth, MsBuild на моем сервере сборки проверяет зависимость DotNetOpenAuth.Core и проверку на сборках .NET, установленных на машина не была скопирована в Бин. В моем случае:

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 для целей .NET 4.0 не существует, я получил предупреждение о зависимости DotNetOpenAuth.Core.dll от System.Net.Http, которую можно найти, но есть а не для платформы 4.0, поскольку проект был нацелен.

Я просто скопировал System.Net.Http.NET 4.0 из пакета в

C:\Program Files (x86)\Reference Сборки \Microsoft\Framework \.NETFramework\v4.0

на моем сервере сборки, и MsBuild смог сравнить с правильной версией System.Net.Htpp для проверки соответствия .NET.NET.

Ответ 2

Если это не удается, вам также может потребоваться применить .Net v4.5.1 dev pack, так как это поддерживает множественный таргетинг. Я установил 4.5.1, и сборки скопировали и все еще имели эту ошибку. Установка dev-пакета из http://www.microsoft.com/en-us/download/details.aspx?id=40772 исправила эту проблему и теперь строит под сервером 2012 r2.