Ошибка ASP.Net MVC - неверный формат IL

Я следую за примером видео ASP.Net MVC "TaskList" и нажав кнопку «Выполнить» в Visual Studio (~ 14:00 мин. видео), я получаю следующее сообщение об ошибке в браузере:

Server Error in '/' Application.

Bad IL format.
Description: An unhandled exception occurred during the execution of the 
current webrequest. Please review the stack trace for more information 
about the error andwhere it originated in the code.

Exception Details: System.BadImageFormatException: Bad IL format.

Source Error:

Line 12:         ' (2) URL with parameters
Line 13:         ' (3) Parameter defaults
Line 14:         routes.MapRoute( _
Line 15:             "Default", _
Line 16:             "{controller}/{action}/{id}", _


Source File: C:\Users\...\TaskList\TaskList\Global.asax.vb    Line: 14

Stack Trace:

[BadImageFormatException: Bad IL format.]
   VB$AnonymousType_0`3..ctor(T0 controller, T1 action, T2 id) +0
   TaskList.MvcApplication.RegisterRoutes(RouteCollection routes) in
    C:\Users\...\TaskList\TaskList\Global.asax.vb:14
   TaskList.MvcApplication.Application_Start() in
    C:\Users\...\TaskList\TaskList\Global.asax.vb:23


Version Information:
   Microsoft .NET Framework Version:2.0.50727.1434;
   ASP.NET Version:2.0.50727.1434 

Я дважды проверил введенный мной код, что мне не хватает?

Спасибо!

Версии:

  • Бета-версия ASP.Net MVC (16 октября 2008 г.)
  • Visual Studion 2008 (9.0.21022.8 RTM)
  • Vista Ultimate с пакетом обновления 1 (SP1)
  • IIS 7.0.6000.16386

person Andrew    schedule 18.10.2008    source источник


Ответы (4)


D'oh!

Нашел проблему, она в HomeController.vb:

Public Class HomeController
    Inherits System.Web.Mvc.Controller

    ' Display a list of tasks
    Function Index()
        Return View()
    End Function

    ' Dislpay a form for creating a new task
    Function Create() As ActionResult
        Return View()
    End Function

    ' Adding a new task to the database
    Function CreateNew(ByVal task As String) As ActionResult
        ' add the new task to the database
        Return RedirectToAction("Index")
    End Function

    ' Mark a task as complete
    Function Complete()
        ' database logic
        Return RedirectToAction("Index")
    End Function

End Class

у Function Complete() отсутствует тип возвращаемого значения, он должен читать:

    ' Mark a task as complete
    Function Complete() As ActionResult
        ' database logic
        Return RedirectToAction("Index")
    End Function

Спасибо за предложения, я думаю, мне нужно в следующий раз проверить свой код!

(хотя было бы неплохо, если бы компилятор указывал на мой код, а не на Global.asax.vb, что заставило меня подумать, что это проблема конфигурации)

person Andrew    schedule 20.10.2008
comment
Согласен, где лучше всего поднять этот вопрос с Microsoft в качестве предложения? - Я просмотрел asp.net/mvc, и мне кажется, что лучшим местом являются форумы, но Я думаю, что это скорее ошибка или запрос функции .. есть предложения? - person Andrew; 21.10.2008

Очень интересно. Не могли бы вы загрузить полный исходный код или скомпилированную DLL (возможно, придется извлечь ее из временной папки ASP.NET)? Я очень сомневаюсь, что компилятор VB должен генерировать недопустимый IL при любых обстоятельствах - так что вы могли столкнуться с ошибкой в ​​компиляторе.

person MichaelGG    schedule 19.10.2008
comment
Подойдет - но код дома, так что выложу сегодня вечером: o) - person Andrew; 20.10.2008
comment
Я собирался опубликовать код, когда обнаружил проблему - см. Мой ответ: stackoverflow.com/questions/215719/ - person Andrew; 21.10.2008

Кажется, это как-то связано с вашим анонимным типом в строке 17. Убедитесь, что ваш код выглядит как

routes.MapRoute( _
    "Default", _
    "{controller}/{action}/{id}", _
    New With { .controller = "Home", .action = "Index" }
)

Если вам нужна дополнительная помощь, опубликуйте свои маршруты в Application_Start

person Nick Berardi    schedule 19.10.2008

app.UseMvc(); без входов или дублированный в Startup.cs может вызвать проблему.

Истинный:

     app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

Ложь:

     app.UseMvc();
person Tayyebi    schedule 21.10.2016