C#应用程序可以';无法从VB类库中找到类型
我使用的是一个商业C#应用程序,它的设计允许使用应用程序在运行时加载的外部插件。基本上,您创建一个类库,该类库继承并扩展基础应用程序中的某些类,并将DLL放置在主应用程序查找它的指定位置。大多数为这个应用程序编写的插件都使用C#但是我想使用VB,我认为这应该是可能的 但是,我在应用程序的错误日志中发现以下异常: AssemblyLoader:加载“Thingamajig”时出现异常: System.Reflection.ReflectionTypeLoadException:中的类 无法加载模块 at(包装器管理为本机)System.Reflection.Assembly:GetTypes (布尔) 位于:0中的System.Reflection.Assembly.GetTypes()[0x00000]处 在中的AssemblyLoader.LoadAssemblys()[0x00000]处:0 有关此异常的其他信息: System.TypeLoadException:无法加载类型 “Thingamajig.My.MyProject”来自汇编“Thingamajig”, 版本=1.0.0.0,区域性=中性,PublicKeyToken=null' System.TypeLoadException:无法加载类型 来自程序集的'Thingamajig.My.MyProject+ThreadSafeObjectProvider'1[T]' 'Thingamajig,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' System.TypeLoadException:无法从加载类型“MyWebServices” 组件'Thingamajig,版本=1.0.0.0,区域性=中性, PublicKeyToken=null' System.TypeLoadException:无法加载类型 'System.Configuration.ApplicationSettingsBase'来自程序集'系统, 版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089' System.IO.FileNotFoundException:无法加载文件或程序集 'Microsoft.VisualBasic,版本=8.0.0.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一 文件名:“Microsoft.VisualBasic,版本=8.0.0.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a' “Thingamajig”是我的VB类的名称。C#应用程序和VB类都参考.NET3.5 我是一个业余程序员,所以请对我放松点。我想发生的是我的类库引用了主应用程序找不到的某些类型(例如:my.MyProject、System.Configuration.ApplicationSettingsBase、MyWebServices)。我试图在类库中添加对Microsoft.VisualBasic的引用,但Visual Studio返回时出错,指出该组件“已被生成系统自动引用”。我的“测试”代码非常简单:C#应用程序可以';无法从VB类库中找到类型,c#,vb.net,class,C#,Vb.net,Class,我使用的是一个商业C#应用程序,它的设计允许使用应用程序在运行时加载的外部插件。基本上,您创建一个类库,该类库继承并扩展基础应用程序中的某些类,并将DLL放置在主应用程序查找它的指定位置。大多数为这个应用程序编写的插件都使用C#但是我想使用VB,我认为这应该是可能的 但是,我在应用程序的错误日志中发现以下异常: AssemblyLoader:加载“Thingamajig”时出现异常: System.Reflection.ReflectionTypeLoadException:中的类 无法加载模块
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
导入系统
进口单位发动机
公共类Thingamajig
继承PartModule
Private _windowpositionas New Rect()
公共覆盖子启动(状态为StartState)
如果状态启动state.Editor,则
RenderingManager.AddToPostDrawQueue(0,AddressOf ondraw)
如果结束
端接头
私人分包商()
如果我的船是活动的那么
_windowPosition=GUILayout.Window(10,_windowPosition,onwindow的地址,“你好,世界”)
如果结束
端接头
私有子窗口(windowid为整数)
Guillayout.BeginHorizontal(Guillayout.Width(250.0F))
标签(“哇!这不是很神奇吗?”)
GUILayout.EndHorizontal()
GUI.DragWindow()
端接头
末级
有什么办法吗?我是否可以从类库中排除有问题的类型,或者告诉C#app在哪里可以找到它们?或者,我试图做的是不可能的吗
更新:
下面的答案(在VSIDE之外编译)适用于我的示例代码,但实际上没有做多少工作。然后我添加了一些外部库,其中一个需要Newtonsoft.Json.dll。我在编译过程中引用了该DLL,它可以很好地编译,但当我运行应用程序时,我在日志中看到:
System.TypeLoadException:无法从程序集“Newtonsoft.Json,Version=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”加载类型“Newtonsoft.Json.Converters.StringEnumConverter”
System.TypeLoadException:无法从程序集“Newtonsoft.Json,Version=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”加载类型“Newtonsoft.Json.Converters.XObjectWrapper”
System.TypeLoadException:无法从程序集“Newtonsoft.Json,版本=4.5.0.0,区域性=中立,PublicKeyToken=30AD4FE6B2A6EED”加载类型“Newtonsoft.Json.Linq.Extensions”
这是同一个问题吗?如果我使用Newtonsoft编译,为什么会出现这些错误?用VB欺骗Unity?呵呵 我对Xamarin做了类似的事情,要做到这一点,您必须手动编译DLL,并从库中删除Microsoft.VisualBasic引用(然后您将不得不使用所有必须替换的代码来仅使用标准框架函数) 这里是我们用来编译MonoTouch的起点
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Vbc.exe/sdkpath:(Unity Framework的路径)/noconfig/verbose/novbruntimeref/imports:System,System.Reflection,System.Collections,System.Collections.Generic/nowarn:420164199942017420184201942032420364202142022/optionstrict+/rootnamespace:(您的命名空间)/定义:“\u MyType=\”空\“”/reference:(所有需要的库)/target:library“(源代码路径)\*.vb”
显示加载类的代码。尝试将“项目属性/设置/访问修饰符”设置为“朋友”。@RobertHarvey the C#是一个商业应用程序,没有可用的源代码。它的设计是可扩展的,但我仅限于修改VB类库。Xamarin有一个针对Monotouch和Monodroid的Newtonsoft实现,它将与Unity一起工作:VB名称空间中没有太多可错过的东西……当您完成“畏缩”时,您可以尽情享受C#-与您的代码的相似性。@Proputix确定吗?您知道吗,即使比较字符串也会使用Microsoft。