.NET MissingMethodException

Полезные статьи и переводы интересных статей
FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

.NET MissingMethodException

Сообщение FireFenix » 25.04.2011 (Пн) 17:39

Предпосылки:

Имеем, некоторый набор классов с интерфейсами
Код: Выделить всё
  Public Interface IObject
    Property Id As Integer
    Property Id_Parent As Integer
    Property Name As String
    Property Info As String

    Property Thumbnail As BitmapImage
    Function Represent(ByRef Context As IContext(Of IObject)) As IGraphics(Of IObject)
  End Interface

  Public Interface IContext(Of T)
    Function Attach(ByRef Item As T) As IGraphics(Of T)
    Sub Detach(ByRef Graphics As IGraphics(Of T))
  End Interface

  Public Class TreeObjectContext(Of IObject) : Implements IContext(Of IObject)
    Private TreeView As TreeView

    Public Sub New(ByRef TreeView As TreeView)
      '...
    End Sub

    Public Function Attach(ByRef Item As IObject) As IGraphics(Of IObject) Implements IContext(Of IObject).Attach
      '...
    End Function

    Public Sub Detach(ByRef Graphics As IGraphics(Of IObject)) Implements IContext(Of IObject).Detach
      '...
    End Sub
  End Class

  <Serializable()>
  Public Class [Class] : Implements ISerializable, IObject
    Public Property Id As Integer Implements IObject.Id
    Public Property Id_Parent As Integer Implements IObject.Id_Parent
    Public Property Name As String Implements IObject.Name
    Public Property Info As String Implements IObject.Info

    Public Property Thumbnail As BitmapImage Implements IObject.Thumbnail

    Public Sub New()
    End Sub

    Private Sub New(ByVal Info As SerializationInfo, ByVal Context As StreamingContext)
      '...
    End Sub

    Public Sub GetObjectData(ByVal Info As SerializationInfo, ByVal Context As StreamingContext) Implements ISerializable.GetObjectData
      '...
    End Sub

    Public Function Represent(ByRef Context As IContext(Of IObject)) As IGraphics(Of IObject) Implements IObject.Represent
      '...
    End Function
  End Class

При вызове
Код: Выделить всё
Dim TreeObjectContext As IContext(Of IObject) = New TreeObjectContext(Of IObject)(New TreeView)
Dim [Class] As IObject = New Class With {.Id_Parent = 0}
[Class].Represent(TreeObjectContext)

В ходе работы кода, вылетеет MissingMethodException на строке [Class].Represent(TreeObjectContext) c сообщением Method not found: 'IGraphics`1<IObject>[Class].Represent(IContext`1<IObject> ByRef)'

Хотя ни компилятор, ни редактор не показывал никакой ошибки. Так же исходя из кода, очевидно, что метод класса присутствует.

Симптомы:

Вылетает MissingMethodException, обычно при приведении типов к параметрам функции, так же возможен Exception на простом обращении к функциям класса

Возможные причины:

* Точные причины - не известны
* Предположение - повреждение/порча оптимизатором IL кода.
* Зависший процесс [проект].vshost.exe

Возможное устранение:

* VB: В Project -> Properties -> Advanced - > Advanced Compile Options убрать галочку с Enable optimization
* C#: В Project -> Properties -> Build убрать галочку с Otimize code

По умолчанию оптимизация - Выключена

* Закрыть VS, Убить процесс [проект].vshost.exe

Статус:

В ходе исследования

Выявлено в:

* Visual Basic 2010 + .NET Framework 4.0

Дополнительная информация:

* Описание MissingMethodException
* Мой топик на msdn (В предпосылках приведён аналогичный код, с отличием в том, что убраны неймспейсы для краткости кода)
* Найденная на мсдн схожая ситуация
* Статья о ключе оптимизации (перевод)
Последний раз редактировалось FireFenix 26.04.2011 (Вт) 0:21, всего редактировалось 7 раз(а).
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: .NET Enable Optimization вызывает MissingMethodException

Сообщение Хакер » 25.04.2011 (Пн) 18:09

Похвально.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: .NET MissingMethodException

Сообщение FaKk2 » 26.04.2011 (Вт) 5:55

А callstack то какой?
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.


Вернуться в VBStreets Knowledge Base

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList