我已经尝试了所有知识来解决这个问题但是因为我无法在这里寻求帮助。
基本上我遇到一些引发TypeLoadException的VB.NET代码的问题。 这是很久以前编写的代码,并且一直没有问题。
我将代码转换为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:无法加载类型&#39; ConsoleApplication1.GenericClass 1' from assembly 'ConsoleApplication13, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
at ConsoleApplication1.GenericClass
1.WriteToLog()
在E:\ Projects \ Temp \ ConsoleApplication13 \ ConsoleApplication13 \ Module1.vb:第13行的ConsoleApplication1.Module1.Main()中
- FIX -
正如 TnTinMn 所建议的那样,使用Me.Log(而不仅仅是Log)可以解决问题。现在我会继续这样做。 现在,我开始在C#中考虑它,你需要调用this.Log,这相当于VB.NET中的Me.Log,所以我在C#中工作的评论并不适用。
感谢大家的帮助。如果有人知道或发现为什么会发生这种情况,我仍然想知道: - )