TypeLoadException仅在VS2013中,仅适用于VB.NET

时间:2018-02-13 19:30:39

标签: c# vb.net visual-studio-2013 typeloadexception vbc

我已经尝试了所有知识来解决这个问题但是因为我无法在这里寻求帮助。

基本上我遇到一些引发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:无法加载类型&#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#中工作的评论并不适用。

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

0 个答案:

没有答案