Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#应用程序可以';无法从VB类库中找到类型_C#_Vb.net_Class - Fatal编程技术网

C#应用程序可以';无法从VB类库中找到类型

C#应用程序可以';无法从VB类库中找到类型,c#,vb.net,class,C#,Vb.net,Class,我使用的是一个商业C#应用程序,它的设计允许使用应用程序在运行时加载的外部插件。基本上,您创建一个类库,该类库继承并扩展基础应用程序中的某些类,并将DLL放置在主应用程序查找它的指定位置。大多数为这个应用程序编写的插件都使用C#但是我想使用VB,我认为这应该是可能的 但是,我在应用程序的错误日志中发现以下异常: AssemblyLoader:加载“Thingamajig”时出现异常: System.Reflection.ReflectionTypeLoadException:中的类 无法加载模块

我使用的是一个商业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返回时出错,指出该组件“已被生成系统自动引用”。我的“测试”代码非常简单:

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。