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

Аргумент типа 'System.Net.Http.Headers.MediaTypeHeaderValue' нарушает ограничение параметра типа 'T'

У меня есть решение Web API (ориентированное на .NET 4.6) с несколькими довольно легкими проектами .NET Core в нем. Я упаковал проекты .NET Core как пакет NuGet и установил их в проект веб-API.

Все строит отлично, но при его запуске я получаю следующее исключение, когда приложение инициализируется.

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

Я проверил в обозревателе объектов, а MediaTypeHeaderValue реализует ICloneable. Любые идеи, что может быть причиной этого?

Я также должен сказать, что это нормально, когда я заменяю проекты .NET Core версиями .NET 4.6.

Edit

Как и ответ Джонатана, мне удалось заставить его работать, обновив project.json для использования System.Net.Http 4.0.0.0 для .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"
    }
  }
}
4b9b3361

Ответ 1

Это проблема с последней версией NuGet System.Net.Http. На данный момент, либо понизите System.Net.Http до версии 4.0.0.0, либо используйте версию, встроенную в Framework 4.6.

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

Ответ 2

Мне не сразу стало ясно, что делать, когда я прочитал правильный ответ выше. Для тех, кто работает в одной и той же проблеме: просто измените/добавьте сопоставление в свой app.config/web.config в конфигурации/времени выполнения/монтажная секция:

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

ОБНОВЛЕНИЕ

.Net-группа обновила пакет System.Net.Http до 4.3.1 21/2/2017. Поэтому, если вы можете обновить, вам больше не понадобится перенаправление.

Подробности проблемы: https://github.com/dotnet/corefx/issues/11100

Ответ 3

Обновление до версии 4.3.0 System.Net.Http разрешило это для меня

Ответ 4

У меня была аналогичная ошибка в приложении ServiceFabric после добавления пакетов самообслуживания eventflow в микросервис WebAPI. Я попробовал обновить отдельный System.Net.Http nuGet, и это не сработало, но затем я только что обновил все пакеты nuGet, и ошибка исчезла.

Щелкните правой кнопкой мыши по проекту и выберите "Управление пакетами NuGet", перейдите к обновлениям и обновите все. Это улучшило меня в основном до 4.3, но были и другие пакеты, которые также нуждались в обновлениях.

Надеюсь, что помогает:)