2016-07-13 18 views
33

Tôi có một giải pháp API Web (nhắm mục tiêu .NET 4.6) với một vài dự án .NET Core khá nhẹ trong đó. Tôi đã đóng gói các dự án .NET Core thành một gói NuGet và cài đặt chúng vào dự án Web API.Loại đối số 'System.Net.Http.Headers.MediaTypeHeaderValue' vi phạm ràng buộc của tham số kiểu 'T'

Mọi thứ đều ổn, nhưng khi chạy, tôi nhận được ngoại lệ sau khi ứng dụng đang khởi tạo.

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 

Tôi đã kiểm tra trong Trình duyệt đối tượng và MediaTypeHeaderValue thực hiện ICloneable. Bất cứ ý tưởng những gì có thể gây ra điều này?

Tôi cũng nên nói rằng điều đó là tốt khi tôi thay thế các dự án .NET Core bằng phiên bản .NET 4.6.

Sửa

Theo phản ứng Johnathan, tôi quản lý để làm cho nó làm việc bằng cách cập nhật project.json sử dụng System.Net.Http 4.0.0.0 cho .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" 
    } 
    } 
} 

Trả lời

27

Đó là một vấn đề với phiên bản NuGet mới nhất của System.Net.Http. Bây giờ, hãy hạ cấp System.Net.Http xuống v4.0.0.0 hoặc sử dụng phiên bản được tích hợp trong Framework 4.6.

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

+0

Đặt thành 4.0.0 hoặc truy cập .Net 4.6 không được giải quyết ở đây .... Tôi đọc rất nhiều trực tuyến nhưng tôi không thể khắc phục ở đây. Bạn có thể giúp tôi được không? –

+0

có bất kỳ tiến bộ nào được thực hiện đối với vấn đề này không? –

24

Hiện chưa rõ ràng với tôi phải làm gì khi tôi đọc câu trả lời đúng ở trên - Đối với những người chạy vào cùng một vấn đề: chỉ cần thay đổi/thêm các bản đồ trong app.config của bạn/web.config trong cấu hình/thời gian chạy/assemblyBinding phần:

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

CẬP NHẬT

Net đội ngũ nòng cốt được cập nhật gói System.Net.Http để 4.3.1 vào ngày 21/2/2017. Vì vậy, nếu bạn có thể cập nhật, bạn không cần chuyển hướng này nữa.

chi tiết về vấn đề này: https://github.com/dotnet/corefx/issues/11100

+0

Với giải pháp này, bạn có thể gặp khó khăn khi gặp vấn đề thời gian chạy nếu bạn tình cờ sử dụng tính năng được thêm vào trong [System.Net.Http 4.1] (https://github.com/dotnet/core/blob/master/ release-notes/1.0/RC2-Final_API_diff.md # systemnethttp). Giải pháp an toàn nhất là nâng cấp lên System.Net.Http 4.3 như @Gertjan đã đề cập. – lgrosales

+0

Nó thực sự không phải là dễ dàng @Igrosales. Cách giải quyết này là/thực sự cần thiết nếu bạn sử dụng System.Net.Http 4.3.0. Vấn đề được theo dõi bởi nhóm lõi .net ở đây: https://github.com/dotnet/corefx/issues/11100 Đó là lý do tại sao bạn cần chuyển hướng này và đó là lý do tại sao trong một số trường hợp, tất cả địa ngục đã bị mất khi bạn cố gắng sử dụng lõi .net (pcl) thư viện đầy đủ .net. Giải pháp được khuyên là cập nhật lên System.Net.Http 4.3.1 – milanio

8

Nâng cấp lên phiên bản 4.3.0 của System.Net.Http giải quyết nó cho tôi

1

Tôi đã có một lỗi tương tự trong một ứng dụng ServiceFabric sau khi thêm các gói eventflow nugget để một dịch vụ WebAPI. Tôi đã thử cập nhật cá nhân System.Net.Http nuGet và điều đó đã không làm việc nhưng sau đó tôi chỉ cập nhật tất cả các gói NuGet và lỗi đã biến mất.

Nhấp chuột phải vào dự án và chọn Quản lý gói NuGet, truy cập cập nhật và cập nhật tất cả. Điều này đã nâng cấp tôi chủ yếu lên 4.3 nhưng cũng có các gói khác cần cập nhật.

Hy vọng rằng sẽ giúp :)

Các vấn đề liên quan