TypeLoadException только в VS2013 и только для VB.NET

Я старался изо всех сил, чтобы исправить это, но, поскольку я не могу здесь, я прошу помощи.

В основном у меня есть проблема с некоторым кодом VB.NET, который генерирует исключение TypeLoadException. Этот код был написан много лет назад и всегда работал без проблем.

  • Если код встроен в VS2013, он потерпит неудачу.
  • Если код встроен в VS2017, он работает.
  • Если проект построен в VS2017 и открыт в VS2013 (без перестройки), работает. После восстановления проблема возвращается.

Я преобразовал код в C#, и он работает, даже если встроен в VS2013.

Единственное, что я сделал в последнее время, - это очистил временные файлы в моей системе (Win7 64), поэтому я думаю, что, возможно, что-то произошло из-за этого, но моих знаний Visual Studio недостаточно, чтобы понять, что может происходить.

Прежде чем пытаться отремонтировать VS2013, хотел узнать, произошло ли это с кем-то еще и найдено ли решение.

Чтобы добавить к путанице проблема существует только с общими классами!

Я создал пример кода для запуска в консольном приложении, чтобы воспроизвести проблему, и вот оно:

Imports System.Runtime.CompilerServices

Module Module1

    Sub Main()

        Dim ng As New NonGenericClass
        ng.WriteToLog() ' Works

        Dim g = New GenericClass(Of IO.FileInfo)
        g.WriteToLog() ' Fails with TypeLoadException

    End Sub

End Module

Public Class GenericClass(Of T)
    Implements IHasLogger

    Public Sub WriteToLog()
        Log.Info("some message")
    End Sub


End Class

Public Class NonGenericClass
    Implements IHasLogger

    Public Sub WriteToLog()
        Log.Info("some message")
    End Sub

End Class

Public Interface ILogger

    Sub Info(message As String)

End Interface

Public Class Logger
    Implements ILogger

    Public Sub Info(message As String) Implements ILogger.Info
        Debug.Print(message)
    End Sub
End Class

Public Interface IHasLogger



End Interface

Public Module LoggerMixin

    <Extension>
    Public Function Log(Of T As IHasLogger)(this As T) As ILogger
        Return New Logger
    End Function


End Module

Я предполагаю, что проблема в компиляторе Visual Basic на данный момент, так как C# не имеет проблем.

Использование VS2017 не вариант, потому что в проекте используются элементы управления от DevExpress, и у меня нет лицензии на версию, совместимую с VS2017.

Спасибо за вашу помощь.

- ОБНОВЛЕНИЕ - (Информация об исключении)

System.TypeLoadException: не удалось загрузить тип 'ConsoleApplication1.GenericClass1' from assembly 'ConsoleApplication13, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. at ConsoleApplication1.GenericClass1.WriteToLog () в ConsoleApplication1.Module1.Main() в E:\Projects\Temp\ConsoleApplication13\ConsoleApplication13\Module1.vb: строка 13

- FIX -

По предложению TnTinMn использование Me.Log (в отличие от просто Log) позволяет обойти проблему. А пока я пойду с этим. И теперь, когда я подумаю об этом в C#, вам нужно будет вызвать this.Log, который эквивалентен Me.Log в VB.NET, так что мои комментарии об этом, работающем в C#, на самом деле не применимы.

Спасибо всем за помощь. Если кто-то знает или узнает, почему это происходит, я все равно хотел бы знать:-)

0 ответов

Другие вопросы по тегам