c#应用程序不能从VB类库中找到类型

本文关键字:类型 类库 VB 应用程序 不能 | 更新日期: 2023-09-27 18:10:11

我正在使用一个商业c#应用程序,该应用程序旨在允许使用应用程序在运行时加载的外部插件。基本上,您创建了一个类库,它继承和扩展了基应用程序中的某些类,并将DLL放在主应用程序查找它的指定位置。为这个应用程序编写的大多数插件使用c#,但我想使用VB代替,我认为这应该是可能的。

然而,我在应用程序的错误日志中得到以下异常:

AssemblyLoader:异常加载'Thingamajig':类中的类模块无法加载

at (wrapper managed-to-native) System.Reflection.Assembly(保龄球)

at System.Reflection.Assembly.GetTypes () [0x00000] in:0

在AssemblyLoader

。LoadAssemblies () [0x00000] in:0

关于此异常的附加信息:

系统。typeloadeexception:无法加载类型"Thingamajig.My。MyProject' from assembly 'Thingamajig,版本=1.0.0.0,文化=中性,PublicKeyToken=null'.

系统。typeloadeexception:无法加载类型"Thingamajig.My。MyProject+ThreadSafeObjectProvider ' 1[T]'从程序集'Thingamajig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

系统。无法加载类型"MyWebServices"assembly 'Thingamajig, Version=1.0.0.0, Culture=neutral,都空的。

系统。typeloadeexception:无法加载类型"System.Configuration。ApplicationSettingsBase' from assembly 'System,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089'.

先。FileNotFoundException:无法加载文件或程序集"微软。VisualBasic,版本=8.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一

文件名称:'Microsoft. 'VisualBasic,版本=8.0.0.0,文化=中性,都必须b03f5f7f11d50a3a '

"Thingamajig"是我的VB类的名字。c#应用程序和VB类都引用了。net 3.5

我是个业余程序员,所以请别对我太苛刻。我认为发生的事情是我的类库引用了某些类型(例如:my。MyProject System.Configuration。ApplicationSettingsBase, MyWebServices),主应用程序无法找到。我试着把微软加进去。VisualBasic在类库中,但是Visual Studio返回一个错误,指出该组件"已经被构建系统自动引用"。这个"测试"的代码非常简单:

Imports System
Imports UnityEngine
Public Class Thingamajig
    Inherits PartModule
    Private _windowPosition As New Rect()
    Public Overrides Sub OnStart(state As StartState)
        If state <> StartState.Editor Then
            RenderingManager.AddToPostDrawQueue(0, AddressOf ondraw)
        End If
    End Sub
    Private Sub ondraw()
        If Me.vessel.active Then
            _windowPosition = GUILayout.Window(10, _windowPosition, AddressOf onwindow, "Hello World")
        End If
    End Sub
    Private Sub onwindow(windowid As Integer)
        GUILayout.BeginHorizontal(GUILayout.Width(250.0F))
        GUILayout.Label("WOW! Isn't this Amazing?")
        GUILayout.EndHorizontal()
        GUI.DragWindow()
    End Sub
End Class

有什么想法吗?我可以从类库中排除有问题的类型,或者以某种方式告诉c#应用程序在哪里找到它们吗?或者,我想做的事情根本不可能?

更新:

下面的答案(在VS IDE之外编译)适用于我的示例代码,并没有真正做太多。然后我添加了一些外部库,其中一个需要Newtonsoft.Json.dll。我在编译期间引用了DLL,它编译得很好,但当我运行应用程序时,我在日志中得到了这个:系统。无法加载Newtonsoft.Json.Converters类型。StringEnumConverter' from assembly 'Newtonsoft。Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.

系统。无法加载Newtonsoft.Json.Converters类型。XObjectWrapper' from assembly 'Newtonsoft。Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.

系统。TypeLoadException:无法加载Newtonsoft.Json.Linq类型。扩展'从汇编'Newtonsoft。Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.

这是同一个问题吗?如果我用Newtonsoft编译,为什么我得到这些错误?

c#应用程序不能从VB类库中找到类型

试图欺骗Unity使用VB?哈哈。

我用Xamarin做了类似的事情,要做到这一点,你必须手动编译DLL并删除Microsoft。从你的库中引用VisualBasic(然后你将畏缩于所有你必须替换的代码,只使用标准框架函数)。

作为起点,这里是我们用来编译MonoTouch的。

C:'WINDOWS'Microsoft.NET'Framework'v3.5'Vbc.exe /sdkpath:(path to Unity framework) /noconfig /verbose /novbruntimeref /imports:System,System.Reflection,System.Collections,System.Collections.Generic /nowarn:42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 /optionstrict+ /rootnamespace:(your namespace) /define:"_MyType='"Empty'"" /reference:(all your needed libraries) /target:library "(path to source code)'*.vb"