it-swarm.com.de

System.Net.Http konnte im aktuell anvisierten Framework .NET 4.0 nicht aufgelöst werden

Nachdem Sie eine Lösung von Visual Studio 2010 auf 2012 verschoben haben, ist ein unangenehmer Fehler aufgetreten. Der Build ist in Ordnung und alles funktioniert perfekt localhost. Ich habe ein neues MVC4-Projekt, das .NET 4.5 erfordert. Daher habe ich das 4.5-Framework auf dem Build-Server installiert. Der Build ist gut, aber MSBuild kann DotNetOpenAuth.Core.dll nicht aus seinem Paketverzeichnis in das Bin-Verzeichnis kopieren. Das Problem ist, dass MSBuild, obwohl das bestimmte Projekt auf das 4.0-Framework abzielt, die Abhängigkeit von .NET 4.5-Framework System.Net.Http Assembly als Teil seiner CoreBuild überprüft.

warning code = "MSB3268" Die primäre Referenz\packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll "konnte nicht aufgelöst werden, da sie indirekt vom Framework Assembly" System.Net abhängig ist .Http, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ", das im aktuell anvisierten Framework nicht aufgelöst werden konnte." .NETFramework, Version = v4.0 ". Um dieses Problem zu beheben, entfernen Sie entweder den Verweis" c :\cc\kazork\code\trunk\src\packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll "oder setzen Sie Ihre Anwendung auf eine Framework-Version um, die" System.Net.Http , Version = 2.0.0.0, Kultur = neutral, PublicKeyToken = b03f5f7f11d50a3a

Hier ist meine Paket-Konfiguration:

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

Ich habe auf System.Net.Http verwiesen und es wird in die Bin kopiert. Das fragliche Projekt zielt auf das 4.0-Framework ab. Meine Version System.Net.Http ist für das 4.0-Framework.

13
Brian Ogden

Obwohl ich System.Net.Http .NET 4.0 über das Nuget-Paket kopiert habe, das bei der Installation der DotNetOpenAuth-Pakete hinzugefügt wurde, überprüfte MsBuild auf meinem Build-Server die Abhängigkeit von DotNetOpenAuth.Core und nicht mit auf dem Computer installierten .NET-Assemblys Was wurde in den Bin kopiert. In meinem Fall:

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

Und es gab keine System.Net.Http-Assembly in meiner

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

ich glaube, MsBuild hat versucht, in den neu installierten .NET 4.5-Assemblys auf meinem Computer nachzusehen ..\Assemblies\Microsoft\Framework.NETFramework\v4.5. Dort gibt es eine System.Net.Http.dll. Anstatt einen offensichtlichen Fehler zu erhalten, dass System.Net.Http.dll für .NET 4.0-Ziele nicht vorhanden ist, wurde eine Warnung über die Abhängigkeit von DotNetOpenAuth.Core.dll von System.Net.Http angezeigt, die gefunden werden kann, aber nicht für die 4.0 Framework als Ziel des Projekts.

Ich habe einfach System.Net.Http .NET 4.0 DLL aus dem Paket nach kopiert 

C:\Programme (x86)\Referenz Assemblies\Microsoft\Framework\.NETFramework\v4.0

auf meinem Build-Server konnte MsBuild die korrekte Version des .NET Framework-Abhängigkeitsabgleichs System.Net.Htpp für 4.0 vergleichen.

28
Brian Ogden

Wenn dies fehlschlägt, müssen Sie möglicherweise auch .Net v4.5.1 dev pack anwenden, da dies mehrere Ziele unterstützt. Ich hatte 4.5.1 installiert und die Baugruppen kopiert und hatten immer noch diesen Fehler. Durch die Installation des Dev Packs von http://www.Microsoft.com/de-de/download/details.aspx?id=40772 wurde dieses Problem behoben und es wird jetzt unter Server 2012 r2 erstellt. 

1
ClutchDude