2017-07-12 28 views

回答

0

您可以使用AppDomain.AssemblyResolve事件在運行時以編程方式從自定義位置加載程序集。

既然你不控制實際的應用程序加載你的插件,這依靠應用程序以某種方式執行你的代碼,讓你有機會鉤住AppDomain

由於您沒有真正提供有關您所使用的插件架構的詳細信息,因此很難確定它是否適用於您。

+0

謝謝。這正是我所期待的。 [本文](http://blog.slaks.net/2013-12-25/redirecting-assembly-loads-at-runtime/)也很有幫助。 應該指出的是,程序集可以處理加載其自己的依賴關係,處理加載失敗異常,並且一般運行直到調用需要無法加載的依賴項的方法。 – user1476860

0

要選擇組件從一個特定的位置添加這些到App.config文件

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath="resources"/> 
    </assemblyBinding> 
</runtime> 

這裏的「資源」是自定義文件夾。你可以在這個文件夾中添加dll。每一個應用程序啓動時,它會首先查找DLL文件在這個自定義文件夾時,您可以將其命名任何東西爲u希望

+0

不幸的是,這不是我的選擇 – user1476860

0

我做如下假設:

  1. 你試圖寫一個插件引用一個額外的.dll - 因此,您將分發這兩個程序集到您的用戶,他們都將在指定的「插件」文件夾。
  2. 該應用程序支持插件體系結構。

您是否嘗試過使用Assembly.LoadFrom method?你應該能夠通過讓你的插件庫的位置:

Assembly me = System.Reflection.Assembly.​Get​Executing​Assembly(); 
// Get the file path of the currently running assembly 
string pathToMe = me.Location; 
string pluginFolder = System.IO.Path.GetDirectoryName(pathToMe); 

然後,您應該能夠加載額外的組件,假設其在同一文件夾中。

+1

你的假設是正確的。對不起,沒有明確說明這些事情。 Assembly.LoadFrom的作品,如果我只通過反射使用加載的DLL。但是如果我在我的C#項目中引用它並在我的代碼中使用它的一些類,我的插件甚至不會啓動,因爲無法加載dll。 – user1476860

+0

不用擔心這些假設。解決這個問題。我相信有一個程序集綁定事件,您可以偵聽並掛鉤您的首選路徑。 –

+0

如果我正確地得到你,即使插件引用的DLL未加載,我的插件(程序集綁定事件的處理程序)中的某些代碼也會運行? – user1476860

相關問題