J'ai une solution API Web (ciblant .NET 4.6) avec quelques projets assez légers .NET Core. J'ai regroupé les projets .NET Core dans un package NuGet et les ai installés dans le projet API Web.
Tout se passe bien, mais lors de son exécution, j'obtiens l'exception suivante lors de l'initialisation de l'application.
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
J'ai vérifié dans le navigateur d'objets et MediaTypeHeaderValue
implémente ICloneable
. Des idées ce qui pourrait être la cause?
Je devrais également dire que je peux me permettre de remplacer les projets .NET Core par des versions .NET 4.6.
Modifier
Selon la réponse de Johnathan, j'ai réussi à le faire fonctionner en mettant à jour project.json pour qu'il utilise System.Net.Http 4.0.0.0 pour .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"
}
}
}
C'est un problème avec la dernière version NuGet de System.Net.Http . Pour l'instant, rétrogradez System.Net.Http vers v4.0.0.0 ou utilisez la version intégrée à Framework 4.6.
Je ne savais pas immédiatement quoi faire lorsque je lisais la bonne réponse ci-dessus - Pour ceux qui rencontrent le même problème: il suffit de modifier/ajouter le mappage dans votre app.config/web.config dans la section configuration/runtime/assemblyBinding:
<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>
METTRE &AGRAVE; JOUR
L'équipe de base .Net a mis à jour le paquet System.Net.Http vers 4.3.1 le 21/02/2017. Donc, si vous pouvez mettre à jour, vous ne devriez plus avoir besoin de cette redirection.
Détails du problème: https://github.com/dotnet/corefx/issues/11100
La mise à niveau vers la version 4.3.0 de System.Net.Http l'a résolue pour moi
Une erreur similaire s'est produite dans une application ServiceFabric après l'ajout des packages de nugget Eventflow à un microservice WebAPI. J'ai essayé de mettre à jour l'individu System.Net.Http nuGet et cela n'a pas fonctionné, mais je viens de mettre à jour tous les paquets nuGet et l'erreur a disparu.
Cliquez avec le bouton droit sur le projet et choisissez Gérer les packages NuGet, accédez aux mises à jour et mettez-les à jour. Cela m’a principalement mis à jour vers la version 4.3, mais d’autres packages nécessitaient également des mises à jour.
J'espère que cela pourra aider :)