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.GenericClass
1.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#, на самом деле не применимы.
Спасибо всем за помощь. Если кто-то знает или узнает, почему это происходит, я все равно хотел бы знать:-)