web-dev-qa-db-fra.com

Impossible de résoudre System.Net.Http dans le framework actuellement ciblé .NET 4.0

Vous avez une mauvaise erreur après avoir déplacé une solution de Visual Studio 2010 à 2012. La compilation fonctionne correctement et tout fonctionne parfaitement localhost. J'ai un nouveau projet MVC4 qui nécessite .NET 4.5 alors j'ai installé le framework 4.5 sur le serveur de compilation. La construction est bonne mais MSBuild ne parvient pas à copier DotNetOpenAuth.Core.dll de son emplacement de package dans le répertoire Bin. Le problème tient au fait que, même si le projet cible le framework 4.0, MSBuild vérifie la dépendance par rapport au framework .NET 4.5 System.Net.Http Assembly dans le cadre de CoreBuild.

warning code = "MSB3268" La référence primaire\packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll "n'a pas pu être résolue car elle a une dépendance indirecte sur le cadre Assembly" System.Net .Http, Version = 2.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a "qui n'a pas pu être résolu dans le cadre actuellement ciblé." .NETFramework, Version = v4.0 ". Pour résoudre ce problème, supprimez la référence" c :\cc\kazork\code\trunk\src\packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll "ou reciblez votre application vers une version d'infrastructure contenant" System.Net.Http , Version = 2.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a

Voici mon paquet config:

<?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>

J'ai System.Net.Http référencé et il est copié dans la corbeille. Le projet en question vise le framework 4.0. Ma version System.Net.Http est pour le framework 4.0.

13
Brian Ogden

Ainsi, même si je copiais System.Net.Http .NET 4.0 via le package Nuget ajouté lors de l’installation des packages DotNetOpenAuth, MsBuild sur mon serveur de génération vérifiait la dépendance DotNetOpenAuth.Core et les assemblées .NET installées sur la machine. ce qui était copié dans le bac. Dans mon cas:

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

Et il n'y avait pas d'assemblée System.Net.Http dans mon

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

je pense donc que MsBuild a essayé de rechercher dans les assemblys .NET 4.5 nouvellement installés, sur ma machine ..\Assemblies\Microsoft\Framework.NETFramework\v4.5 où il y a un System.Net.Http.dll et c’est pourquoi, au lieu d’obtenir une erreur absolue affirmant que System.Net.Http.dll pour les cibles .NET 4.0 n’existe pas, j’ai reçu un avertissement concernant la dépendance de DotNetOpenAuth.Core.dll à System.Net.Http, qui peut être trouvée mais n’est pas destinée à la 4.0 cadre que le projet visait.

J'ai simplement copié System.Net.Http .NET 4.0 DLL du paquet vers 

C:\Program Files (x86)\Référence Assemblies\Microsoft\Framework\.NETFramework\v4.0

sur mon serveur de génération et MsBuild a pu comparer à la version correcte System.Net.Htpp pour la vérification de la dépendance 4.0 du framework .NET.

28
Brian Ogden

Si cela échoue, vous devrez peut-être également appliquer le .Net v4.5.1 dev pack car cela prend en charge le ciblage multiple. J'avais 4.5.1 installé et les assemblys copiés et avaient toujours cette erreur. L'installation du dev pack à partir de http://www.Microsoft.com/en-us/download/details.aspx?id=40772 a corrigé ce problème et est désormais générée sous le serveur 2012 R2. 

1
ClutchDude