0

我已经尝试了我所知道的一切来解决这个问题,但我不能在这里寻求帮助。

基本上我对一些引发 TypeLoadException 的 VB.NET 代码有疑问。这是很久以前编写的代码,并且始终可以正常工作。

  • 如果代码是在 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:无法1' from assembly 'ConsoleApplication13, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. at ConsoleApplication1.GenericClass在 E:\Projects\Temp\ConsoleApplication13\ConsoleApplication13\Module1.vb:line 13 中的 ConsoleApplication1.Module1.Main() 处加载类型“ConsoleApplication1.GenericClass 1.WriteToLog()

- 使固定 -

正如TnTinMn所建议的那样,使用 Me.Log(而不仅仅是 Log)允许规避问题。现在我会同意的。现在我开始在 C# 中考虑它,您需要调用 this.Log ,它相当于 VB.NET 中的 Me.Log,所以我对它在 C# 中工作的评论并不真正适用。

感谢大家的帮助。如果有人知道或发现为什么会发生这种情况,我仍然想知道:-)

4

0 回答 0