web-dev-qa-db-ja.com

型引数 'System.Net.Http.Headers.MediaTypeHeaderValue'は、型パラメーター 'T'の制約に違反しています

Web APIソリューション(.NET 4.6を対象としています)には、かなり軽量な.NET Coreプロジェクトがいくつか含まれています。 .NET CoreプロジェクトをNuGetパッケージとしてパッケージ化し、Web 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

Object Browserでチェックしたところ、MediaTypeHeaderValueICloneableを実装しています。これを引き起こしている可能性のあるアイデアはありますか?

また、.NET Coreプロジェクトを.NET 4.6バージョンに置き換えても問題ないと言えます。

編集

Johnathanの応答に従って、.NET 4.6でSystem.Net.Http 4.0.0.0を使用するようにproject.jsonを更新することにより、なんとか動作させることができました。

{
  "version": "1.0.3-*",

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

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

これは、System.Net.Httpの最新のNuGetバージョンの問題です。今のところ、System.Net.Httpをv4.0.0.0にダウングレードするか、Framework 4.6に組み込まれているバージョンを使用してください。

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

35
Jonathan

上記の正しい答えを読んだときに何をすべきかすぐにわかりませんでした-同じ問題に直面している人のために:configuration/runtime/assemblyBindingセクションで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>

[〜#〜] update [〜#〜]

.Netコアチームは2017年2月1日にSystem.Net.Httpパッケージを4.3.1に更新しました。したがって、更新できる場合は、このリダイレクトはもう必要ありません。

問題の詳細: https://github.com/dotnet/corefx/issues/111

35
milanio

System.Net.Httpのバージョン4.3.0へのアップグレードで解決しました

14
Gertjan

イベントフローナゲットパッケージをWebAPIマイクロサービスに追加した後、ServiceFabricアプリケーションで同様のエラーが発生しました。個々のSystem.Net.Http nuGetを更新しようとしましたが、動作しませんでしたが、すべてのnuGetパッケージを更新しただけで、エラーはなくなりました。

プロジェクトを右クリックして、[NuGetパッケージの管理]を選択し、更新に移動してすべて更新します。これにより、主に4.3にアップグレードされましたが、更新が必要な他のパッケージもありました。

それが役立つことを願っています:)

1
gperrego