我不希望這樣:Assembly.LoadFrom(PathToAssembly)
。loading Net。將DLL文件動態添加到我的項目中
我需要真正把運行時代碼中的dll帶到我的項目中,然後在沒有激活器類的情況下使用它的類。完全像我加載一個網。 DLL文件進入我的項目不在運行時,但現在我需要在運行時添加。
我不希望這樣:Assembly.LoadFrom(PathToAssembly)
。loading Net。將DLL文件動態添加到我的項目中
我需要真正把運行時代碼中的dll帶到我的項目中,然後在沒有激活器類的情況下使用它的類。完全像我加載一個網。 DLL文件進入我的項目不在運行時,但現在我需要在運行時添加。
在這種情況下,您將遵循接口模式。在哪裏創建一個包含所有所需方法存根的接口類。你仍然會執行你的Assembly.Load,但是你將結果激活的對象投射到你的接口類。
我沒有在c#中的例子,但這個vb.net應該很容易遵循。
Dim alib As Byte() = System.IO.File.ReadAllBytes(Application.StartupPath & "\\PeriodicMinimumsUtilities.dll")
Dim adeb As Byte() = System.IO.File.ReadAllBytes(Application.StartupPath & "\\PeriodicMinimumsUtilities.pdb")
Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.Load(alib, adeb)
Dim type As Type = Assembly.GetType("PeriodicMinimumsUtilities.frmPeriodicMinimumsReconcilliation")
Dim obj As Fireblade.POS.Business.IPeriodicMinimumsUtilities = Activator.CreateInstance(type)
接口:
Public Interface IPeriodicMinimumsUtilities
WriteOnly Property Database() As Meritsoft.GolfRez.Data.Database
Function LoadMinimumsDataSource(ByVal v_fiscalYear As String, ByVal v_fiscalPeriod As Integer) As DataSet
Function GetMinimumsSpent(ByVal v_fiscalYear As String, ByVal v_fiscalPeriod As Integer) As DataTable
Function LoadFiscalPeriodsDataSource(ByVal ImposeLimit As Boolean) As DataSet
End Interface
也被稱爲**依賴注入**:http://stackoverflow.com/questions/130794/what-is-dependency-injection –
謝謝DP,學會了一個新術語。 – DragonZero
這不是依賴注入,這不是傳入對象一個類依賴於通過它的構造函數或屬性。這只是使用實現恰好在動態加載的DLL中的接口。 –
LoadFrom
或者,例如,你可以嵌入組件的資源,並從流在項目中引用DLL不符合在運行時加載它的條件。 –
Aaaand?這就是爲什麼你需要項目2. – Lanorkin
在運行時,沒有其他方式在.Net中動態加載程序集,而不是由Assembly
提供的方法。也許你有一個更具體的問題與你提到的方法調用有關。如果是這樣,請通過更新您的問題來指定它,以便社區可以爲您提供幫助。
不能使用類型信息(使用類正常),並在運行時加載DLL,因爲你將沒有類型信息編譯。
你可以正常使用接口,並加載dll的接口,或者你可以引用dll並正常使用這些類。
第三個選項(但是一個可怕的想法)將反映你嘗試使用的所有類,使用幫助器方法和字符串來識別屬性和方法。不是使用類的正常方式,但它會在沒有類型信息的情況下進行實際編譯。
在解決方案中添加對其的引用。 –
Assembly.LoadFrom有什麼問題?它動態加載 –
是否會鉤住你的問題的答案? http://stackoverflow.com/questions/11101223/hook-c-sharp-method-in-dll –