2013-05-26 9 views
7

Pobrałem przykładowy kod dla webapi i otrzymuję ten wyjątek Otworzyłem tę próbkę za pomocą Visual Studio 2012 Ultimate Version i mam najnowszą wersję newtonsoft installed.I dostaję ten błąd, gdy uruchomię tę aplikację. Kompiluje się pomyślnie. Każdy pomysł, dlaczego ten błąd i czy istnieje sposób, aby rozwiązać ten wyjątek.Nie znaleziono metody "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: 

Oto kod gdy nie

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 } 
      ); 
     } 
    } 

poznałem, że muszę włączyć „Dołącz prerelease” dla Nuget from this post, ale jak mogę włączyć jak włączyć "Uwzględnij wstępne wydanie" dla NuGeta?

Odpowiedz

9

Jak włączyć, aby włączyć opcję "Uwzględnij wstępne wydanie" dla NuGet?

Aby zainstalować Json.NET z „obejmują Wersji Wstępnej”, uruchom następujące polecenie w the Package Manager Console

Install-Package Newtonsoft.Json –IncludePrerelease 
2

Inną przyczyną może być, jeśli masz starszą wersję w swojej GAC. Dla mnie wersja była w .NET 4.0 GAC usunięcie tego rozwiązany problem

+0

Czy możesz podać więcej szczegółów na ten temat? –

+0

Hej, odzyskuję swój umysł, ale myślę, że miałem wersję w moim .NET4 Gac, którą można zidentyfikować tutaj http://stackoverflow.com/questions/6925043/where-is-gacutil-for-net-framework -4-0-in-windows-7 i musiałem go usunąć, aby środowisko wykonawcze mogło pobrać nowszą wersję: https://msdn.microsoft.com/en-us/library/zykhfde0(v=vs.110) .aspx Nie wiem, dlaczego ta wersja była oryginalnie w moim GAC. Nadzieja, która pomaga – PatrickWalker

1

Po prostu usunąć następujący wiersz w RouteConfig (został już zatarte).

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

W VS2012 powinno to wystarczyć.

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

Może zajść potrzeba weryfikacji kontrolera. Usuń także odwołanie do klasy w RouteConfig, jeśli nie jesteś pewien, do czego służyły. W moim przypadku właśnie zachowują te dwa:

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

Innym rozwiązaniem jest, jeśli chcesz i masz czas, aby dowiedzieć się, co powoduje konflikt, wtedy można ustawić swój projekt Budowanie Wyjście gadatliwość szczegółowej (Go to Tools-> Options -> Project and Solutions -> Build and Run -> MSBuild project build output verbosity) and upon build check your logs.

+0

Przyjęta odpowiedź nie zadziałała, ale usunięto ją z RouteConfig. Ale czy masz jakieś dokumenty stwierdzające, że usunięcie tego nie spowoduje żadnych problemów na linii? – Chad

Powiązane problemy