2016-07-13 16 views
33

Mam rozwiązanie Web API (targeting .NET 4.6) z kilkoma dość lekkich projektów .NET Core w nim. Pakowałem projekty .NET Core jako pakiet NuGet i instalowałem je w projekcie Web API.Argument typu "System.Net.Http.Headers.MediaTypeHeaderValue" narusza ograniczenie parametru typu "T"

Wszystko jest w porządku, ale podczas uruchamiania otrzymuję następujący wyjątek podczas inicjowania aplikacji.

Method System.Net.Http.CloneableExtensions.Clone: type argument 'System.Net.Http.Headers.MediaTypeHeaderValue' violates the constraint of type parameter 'T'. 

[VerificationException: Method System.Net.Http.CloneableExtensions.Clone: type argument 'System.Net.Http.Headers.MediaTypeHeaderValue' violates the constraint of type parameter 'T'.] 
    System.Net.Http.Formatting.MediaTypeConstants.get_ApplicationJsonMediaType() +0 
    System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() +64 
    System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() +41 
    System.Web.Http.HttpConfiguration.DefaultFormatters(HttpConfiguration config) +26 
    System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes) +214 
    System.Web.Http.GlobalConfiguration.<CreateConfiguration>b__0() +60 
    System.Lazy`1.CreateValue() +411 
    System.Lazy`1.LazyInitValue() +183 
    System.Lazy`1.get_Value() +75 
    System.Web.Http.GlobalConfiguration.get_Configuration() +27 
    Runpath.Platform.Web.DependencyResolution.StructureMapBootStrapper.Initialise() in C:\Code3\Runpath\Markets\Platform\Main - Copy\Runpath.Platform.Web\DependencyResolution\StructureMapBootStrapper.cs:15 
    Runpath.Platform.Web.WebApiApplication.Application_Start() in C:\Code3\Runpath\Markets\Platform\Main - Copy\Runpath.Platform.Web\Global.asax.cs:30 

[HttpException (0x80004005): Method System.Net.Http.CloneableExtensions.Clone: type argument 'System.Net.Http.Headers.MediaTypeHeaderValue' violates the constraint of type parameter 'T'.] 
    System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +493 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +176 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +364 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +303 

[HttpException (0x80004005): Method System.Net.Http.CloneableExtensions.Clone: type argument 'System.Net.Http.Headers.MediaTypeHeaderValue' violates the constraint of type parameter 'T'.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +770 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +195 

Sprawdziłem w Object Browser i MediaTypeHeaderValue robi wdrożyć ICloneable. Jakieś pomysły, które mogą być przyczyną tego?

Powiedziałbym również, że wszystko jest w porządku, gdy zastępuję projekty .NET Core wersjami .NET 4.6.

Edit

Zgodnie odpowiedzi Johnathan jest, udało mi się dostać to działa poprzez aktualizację project.json używać System.Net.Http 4.0.0.0 dla .NET 4.6:

{ 
    "version": "1.0.3-*", 

    "dependencies": { 
    "NETStandard.Library": "1.6.0" 
    }, 

    "frameworks": { 
    "net46": { 
     "dependencies": { 
     "System.Net.Http": "4.0.0" 
     } 
    }, 
    "netstandard1.6": { 
     "imports": "dnxcore50" 
    } 
    } 
} 

Odpowiedz

27

To problem z najnowszą wersją systemu System.Net.Http w wersji NuGet. Na razie zmień wersję System.Net.Http na wersję 4.0.0.0 lub użyj wersji wbudowanej w Framework 4.6.

https://github.com/dotnet/corefx/issues/9884

+0

Ustawienie do 4.0.0 lub przechodząc do .NET 4.6 nie rozwiązano tutaj .... czytam dużo w Internecie, ale nie mogę go naprawić tutaj. Możesz mi pomóc? –

+0

został osiągnięty postęp w tej sprawie? –

24

Nie było od razu jasne dla mnie, co robić, gdy czytam poprawną odpowiedź wyżej - Dla tych, działa na tej samej kwestii: po prostu zmienić/dodać mapowanie w app.config/web.config w konfiguracji/runtime/assemblyBinding odcinku:

<dependentAssembly> 
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.0.0.0" /> 
    </dependentAssembly> 

UPDATE

.Net rdzeń zespołu aktualizowany pakiet System.Net.Http do 4.3.1 w dniu 21/2/2017. Jeśli więc możesz zaktualizować, nie powinieneś już potrzebować tego przekierowania.

Szczegóły emisji: https://github.com/dotnet/corefx/issues/11100

+0

Dzięki temu rozwiązaniu Twój problem może się nie udać, jeśli używasz funkcji dodanej w [System.Net.Http 4.1] (https://github.com/dotnet/core/blob/master/ release-notes/1.0/RC2-Final_API_diff.md # systemnethttp). Najbezpieczniejszym rozwiązaniem byłoby uaktualnienie do System.Net.Http 4.3 jako @Gertjan wymienione. – lgrosales

+0

To nie jest takie łatwe @Igrosales. To obejście było/jest rzeczywiście potrzebne, jeśli używasz System.Net.Http 4.3.0. Problem jest śledzony przez rdzenny zespół .net tutaj: https://github.com/dotnet/corefx/issues/11100 Dlatego właśnie potrzebowałeś tego przekierowania i właśnie dlatego w niektórych sytuacjach rozpętało się piekło, gdy próbowałeś użyć rdzenia .net (pcl) biblioteka w pełnym .net. Zalecanym rozwiązaniem jest aktualizacja do System.Net.Http 4.3.1 – milanio

8

uaktualnienie do wersji 4.3.0 z System.Net.Http rozwiązać go dla mnie

1

Miałem podobny błąd w ServiceFabric aplikacji po dodaniu pakietów eventflow bryłkę mikroserwis WebAPI. Próbowałem aktualizacji poszczególnych NUGet System.Net.Http i to nie działało, ale następnie zaktualizowałem wszystkie pakiety nuGet i błąd zniknął.

Kliknij prawym przyciskiem myszy na projekcie i wybierz Zarządzaj pakietami NuGet, przejdź do aktualizacji i zaktualizuj wszystko. Ulepszono mnie głównie do wersji 4.3, ale były też inne pakiety, które również wymagały aktualizacji.

nadzieję, że pomoże :)