我正在使用商業C#應用程序,它旨在允許使用應用程序在運行時加載的外部插件。基本上,您創建了一個類庫,它可以繼承和擴展基礎應用程序中的某些類,並將您的DLL放置在主應用程序查找的指定位置。大多數爲這個應用程序編寫的插件使用C#,但我想用VB代替,我認爲這應該是可能的。C#應用程序無法從VB類庫中找到類型
不過,我得到以下例外的應用程序的錯誤日誌:
AssemblyLoader: Exception loading 'Thingamajig': System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool)
at System.Reflection.Assembly.GetTypes() [0x00000] in :0
at AssemblyLoader.LoadAssemblies() [0x00000] in :0
Additional information about this exception:
System.TypeLoadException: Could not load type 'Thingamajig.My.MyProject' from assembly 'Thingamajig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
System.TypeLoadException: Could not load type 'Thingamajig.My.MyProject+ThreadSafeObjectProvider`1[T]' from assembly 'Thingamajig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
System.TypeLoadException: Could not load type 'MyWebServices' from assembly 'Thingamajig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
System.TypeLoadException: Could not load type 'System.Configuration.ApplicationSettingsBase' from assembly 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
File name: 'Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
「Thingamajig」是我的VB類的名稱。 C#應用程序和VB類參考.NET 3.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
任何想法如何進行?我可以從類庫中排除有問題的類型,或者以某種方式告訴C#應用程序在哪裏可以找到它們?或者,我正在努力做什麼根本不可能?
UPDATE:
以下(編譯VS IDE之外),答案工作了我的示例代碼,並沒有真正做多。然後我添加了一些外部庫,其中一個需要Newtonsoft.Json.dll。我在編譯過程中引用了這個DLL,它編譯的很好,但是當我運行應用程序時,我在日誌中得到了這個: System.TypeLoadException:無法從程序集'Newtonsoft.Json,Version ='中加載類型'Newtonsoft.Json.Converters.StringEnumConverter' 4.5.0.0,文化=中立,PublicKeyToken = 30ad4fe6b2a6aeed'。
System.TypeLoadException:無法從程序集'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'加載類型'Newtonsoft.Json.Converters.XObjectWrapper'。
System.TypeLoadException:無法從程序集'Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'加載類型'Newtonsoft.Json.Linq.Extensions'。
這是一樣的問題?如果我用Newtonsoft編譯,爲什麼我會得到這些錯誤?
向我們展示加載類的代碼。 –
嘗試將「項目屬性/設置/訪問修改器」設置爲「朋友」。 – dummy
@RobertHarvey C#是一個商業應用程序,沒有源代碼可用。它被設計爲可擴展的,但我僅限於修改VB類庫。 – Timbo