2012-03-13 71 views
1

我目前正在使用MEF爲我的應用程序加載插件。我想將這些插件移到bin目錄以外的插件目錄,以便其他應用程序可以使用插件。我遇到的一個問題是,其中一個插件依賴於單獨的dll中的自定義xml序列化類,當我嘗試使用特定的插件時,出現「無法加載文件或程序集」錯誤試圖加載單獨的dll。無法加載特定的DLL插件

我的app.config目前有以下:

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

我不得不加在我原來的應用程序的順序與此特定的dll工作探測。所有插件DLL最初都位於名爲「插件」的bin內的子目錄中。但是現在我想將插件移動到所有應用程序的公共目錄中,我會去解決這個問題嗎?任何援助將不勝感激。

+0

將移動自定義XML序列化類/插件到GAC是你一個可行的解決方案? – M3NTA7 2012-03-13 16:14:06

+0

不幸的是我不能那樣做。 – arc1880 2012-03-13 16:28:31

+0

這很奇怪,我也使用MEF;我可以把依賴關係放在plugins目錄中,它就可以工作。你在用什麼樣的目錄?我想你應該在任何情況下都可以使用ILMerge加入dll的 – Dirk 2012-03-13 20:33:18

回答

0

您必須確保所需的所有依賴項都在您的目錄中。

它必須看起來像這樣的事情:

var catalog = new AggregateCatalog(); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); 
catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));//dependencies your plugin dll needs 
catalog.Catalogs.Add(new DirectoryCatalog(@"YourPluginFolderPath\Plugins\"));//your plugin dll's 

var cc = new CompositionContainer(catalog); 
var t = cc.GetExport<IMyPluginTestStuffExport>().Value;