2016-07-13 17 views
33

かなり軽量な.NETコアプロジェクトを含むWeb APIソリューション(.NET 4.6をターゲットにしています)があります。 .NET CoreプロジェクトをNuGetパッケージとしてパッケージ化し、Web APIプロジェクトにインストールしました。型引数 'System.Net.Http.Headers.MediaTypeHeaderValue'が型パラメータ 'T'の制約に違反しています

すべてがうまくいきますが、実行すると、アプリケーションの初期化時に次の例外が発生します。

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 

私は、オブジェクトブラウザで確認してきた、とMediaTypeHeaderValueICloneableを実装しています。これを引き起こす可能性のあるアイデアは何ですか?

また、.NET Coreプロジェクトを.NET 4.6のバージョンに置き換えても問題ありません。ジョナサンの応答を1として

編集

、私はそれは.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" 
    } 
    } 
} 

答えて

27

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

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

+0

4.0.0に設定するか、ここでは解決できない4.6を.NETに行く

希望....私は、オンラインでたくさん読んで、私はここでそれを修正することはできません。手伝って頂けますか? –

+0

この問題に関して何らかの進展がありましたか? –

24

私は上記の正解読んだときには何をすべきか私にはすぐに明らかではなかった - 同じ問題に実行している人のために:ちょうどあなたのapp.config/web.configファイルにマッピングを追加/変更しますコンフィギュレーション/ランタイム/ 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> 

UPDATE

ネットコアチーム更新System.Net.Httpパッケージに4.3.1/21/2/2017 更新できる場合は、このリダイレクトはもう必要ありません。問題の

詳細:System.Net.Httpのバージョン4.3.0へhttps://github.com/dotnet/corefx/issues/11100

+0

このソリューションでは、[System.Net.Http 4.1](https://github.com/dotnet/core/blob/master/)に追加された機能を使用していると、実行時に問題が発生する可能性があります。リリースノート/ 1.0/RC2-ファイナル_API_diff.md#systemnethttp)。最も安全なソリューションは、System.Net.Http 4にアップグレードすることです。@ Gertjanが述べたように3。 – lgrosales

+0

それは実際には簡単ではありません@Igrosales。この回避策は、System.Net.Http 4.3.0を使用する場合には実際に必要です。この問題は、.netのコアチームによって追跡されています。https://github.com/dotnet/corefx/issues/11100その理由は、このリダイレクトが必要なことです。そのため、一部の状況では、.netコアを使用しようとするとすべての地獄が壊れました(pcl)ライブラリを完全に.net。推奨される解決策は、System.Net.Http 4.3.1に更新することです。 – milanio

8

アップグレードは、私はeventflowナゲットパッケージを追加した後ServiceFabricアプリケーションで同様のエラーが発生しました私

1

のためにそれを解決しましたWebAPIマイクロサービス私は個々のSystem.Net.Http nuGetを更新しようとしましたが、うまくいかなかったのですが、すべてのnuGetパッケージを更新したところ、エラーはなくなりました。

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

関連する問題