Wechsel von asp.net mvc 1.0 -> 2.0 - s#arp-Framework
-
14-09-2020 - |
Frage
Ich habe eine ältere asp.net-MVC-Lösung (s#arp-Framework) mit zwei Projekten, eines für das Web und eines für den Controller.Ich habe die DLL auf die neuesten Versionen (2.0) für System.Web.MVC und Microsoft.Web.MVC geändert.Ich habe auch meine Web.Config angepasst:
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Ist das (theoretisch) alles, was ich tun muss?
Die Lösung lässt sich gut erstellen, aber ich erhalte die folgende Fehlermeldung:
Es wurde versucht, auf ein Element als Typ zuzugreifen, der mit dem Array nicht kompatibel ist.Beschreibung:Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten.Weitere Informationen zum Fehler und seinem Ursprung im Code finden Sie im Stack-Trace.
Ausnahmedetails:System.ArrayTypeMismatchException:Es wurde versucht, auf ein Element als Typ zuzugreifen, der mit dem Array nicht kompatibel ist.
Quellfehler:
Zeile 32:Zeile 33:ViewEngines.Engines.Clear();Zeile 34:ViewEngines.Engines.Add(new AreaViewEngine());Zeile 35:Zeile 36:ModelBinders.Binders.DefaultBinder = new SharpModelBinder();
Dies hängt möglicherweise nicht mit dem MVC-Switch, sondern mit dem S#ARP-Framework zusammen.Irgendwelche Ideen?Danke.
Beste Wünsche,
Christian
Lösung
Dieses Problem hängt mit der S#arp-Architektur zusammen.Sie müssen die MVC2-Version von S#arp hier herunterladen: http://github.com/codai/Sharp-Architecture/downloads.Das erste Element in der Liste ist das, was Sie benötigen, einschließlich der VS2010-Vorlage.(Beachten Sie den Tippfehler in der Beschreibung, der besagt, dass ASP.NET 2 ASP.NET MVC 2 sein sollte.)
Hoffentlich hilft das.
P.S.Wenn Sie sich für die Ursache der Ausnahme selbst interessieren, lesen Sie diesen kurzen Artikel: http://dotnetperls.com/arraytypemismatchException.Ich vermute (ohne einen Blick auf die S#arp 1- und MVC2-Quelle zu werfen), dass die SharpModelBinder
(die MVC1-Version) ist jetzt nicht mit der MVC2-Implementierung der MVC kompatibel DefaultBinder
, und dies wird zur Kompilierungszeit nicht abgefangen, weil SharpModelBinder
erbt von DefaultBinder
und der Compiler denkt, alles sei in Ordnung.Erst zur Laufzeit wird die tatsächliche Inkompatibilität erkannt.