2013-05-26 14 views
7

Tôi đã tải xuống mã mẫu cho webapi và tôi nhận ngoại lệ này Tôi đã mở mẫu này bằng Visual Studio 2012 Ultimate Version và tôi có verion mới nhất newtonsoft installed.I am nhận được lỗi này khi tôi chạy ứng dụng này.Its biên dịch thành công. Bất kỳ ý tưởng nào tại sao lỗi này và có cách nào để giải quyết ngoại lệ này.Phương pháp không tìm thấy 'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute (Boolean)

System.MissingMethodException was unhandled by user code 
    HResult=-2146233069 
    Message=Method not found: 'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)'. 
    Source=System.Net.Http.Formatting 
    StackTrace: 
     at System.Net.Http.Formatting.JsonContractResolver..ctor(MediaTypeFormatter formatter) 
     at System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() 
     at System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() 
     at System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor() 
     at System.Web.Http.HttpConfiguration.DefaultFormatters() 
     at System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes) 
     at System.Web.Http.GlobalConfiguration.<.cctor>b__0() 
     at System.Lazy`1.CreateValue() 
     at System.Lazy`1.LazyInitValue() 
     at System.Lazy`1.get_Value() 
     at System.Web.Http.GlobalConfiguration.get_Configuration() 
     at System.Web.Http.RouteCollectionExtensions.MapHttpRoute(RouteCollection routes, String name, String routeTemplate, Object defaults, Object constraints, HttpMessageHandler handler) 
     at System.Web.Http.RouteCollectionExtensions.MapHttpRoute(RouteCollection routes, String name, String routeTemplate, Object defaults) 
     at WebAPIRc.RouteConfig.RegisterRoutes(RouteCollection routes) in c:\Users\viemon\Downloads\WebAPIRc\WebAPIRc\WebAPIRc\App_Start\RouteConfig.cs:line 17 
     at WebAPIRc.WebApiApplication.Application_Start() in c:\Users\viemon\Downloads\WebAPIRc\WebAPIRc\WebAPIRc\Global.asax.cs:line 36 
    InnerException: 

Đây là mã mà nó không thành công

public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      //Exception error start 
      routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
      //exception error end 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 

tôi đến để biết rằng tôi cần phải bật "Bao gồm phát hành trước" cho NuGet from this post, nhưng làm thế nào để tôi bật cách bật "Bao gồm Prerelease" cho NuGet?

Trả lời

9

làm cách nào để bật cách "Bao gồm tiền phát hành" cho NuGet?

Để cài đặt Json.NET với "Bao gồm Prerelease", hãy chạy lệnh sau trong the Package Manager Console

Install-Package Newtonsoft.Json –IncludePrerelease 
2

Một nguyên nhân của việc này có thể được nếu bạn có một phiên bản cũ trong GAC của bạn. Đối với tôi phiên bản nằm trong .NET 4.0 GAC, việc này đã giải quyết được sự cố

+0

Bạn có thể cung cấp thêm chi tiết về điều này không? –

+0

Hey, tôi đang đúc tâm trí của tôi trở lại nhưng tôi nghĩ rằng tôi đã có một phiên bản trong NET4 NET của tôi có thể được xác định ở đây http://stackoverflow.com/questions/6925043/where-is-gacutil-for-net-framework -4-0-in-windows-7 và tôi phải xóa nó để thời gian chạy sẽ nhận phiên bản mới hơn https://msdn.microsoft.com/en-us/library/zykhfde0(v=vs.110) .aspx Tôi không biết tại sao phiên bản đó có trong GAC của tôi ban đầu. Hy vọng rằng sẽ giúp – PatrickWalker

1

Trong trường hợp của tôi Bạn chỉ cần xóa dòng sau trong RouteConfig (nó đã bị xóa).

//Exception error start 
    routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
    //exception error end 

Trong VS2012, điều này là đủ.

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Bạn cũng có thể cần xác minh bộ điều khiển của mình. Cũng loại bỏ một số tham chiếu Lớp trong RouteConfig, nếu bạn không chắc chắn những gì họ đã cho. Trong trường hợp của tôi, tôi chỉ giữ lại hai:

using System.Web.Mvc; 
using System.Web.Routing; 

Một giải pháp khác là nếu bạn muốn và có một thời gian để tìm ra nguyên nhân gây ra cuộc xung đột, sau đó bạn có thể thiết lập dự án của bạn Xây dựng Output cách rườm rà để Chi tiết (Go to Tools-> Options -> Project and Solutions -> Build and Run -> MSBuild project build output verbosity) and upon build check your logs.

+0

Câu trả lời được chấp nhận đã không làm việc cho tôi, nhưng loại bỏ điều này từ RouteConfig đã làm. Nhưng bạn có bất kỳ tài liệu nào nói rằng việc xóa bỏ điều này sẽ không gây ra bất kỳ vấn đề nào không? – Chad