我有一個使用MEF加載插件的應用程序,它工作得很好。所有的插件引用核心庫並導出正確的部分,應用程序加載部分沒有任何問題。MEF中的Dll版本控制
出現的問題與插件庫的各個依賴關係有關。一個例子是Ionic.Zip和Newtonsoft.Json。由於在開發這些外部部件時使用了Nugget,因此不同的插件傾向於引用這些庫的不同版本。應用程序甚至可以加載它自己的(在Newtonsoft.Json的情況下)。
我意識到插件庫正在尋找這些庫的特定版本,因此在運行特定任務時會引發錯誤。
有沒有一種方法可以在開發過程中指出插件不應該綁定到任何特定版本的庫,以便它可以使用任何已加載的內容?
這樣,插入的Newtonsoft.Json或Ionic.Zip版本與哪個版本無關,它只會使用主應用程序加載的版本。
你嘗試掛鉤到AppDomain.AssemblyResolve找到更多的信息,所有呼叫事件並使用Assembly.Load加載程序集 –
不,我只是使用AggregateCatalog和AssemblyCatalog以及DirectoryCatalog從指定的文件夾加載插件。加載插件時不會發生錯誤。他們加載得很好。比方說一個庫使用不同版本的Ionic.Zip,它會正常加載,但當我實際調用一個使用Ionic.Zip的方法時會拋出異常。 – ritcoder
你會得到哪些例外? 在我們的解決方案中,我們使用BindingRedirect來解決這些kindda問題。爲需要修復的程序集創建一個程序集綁定,並將所有版本(從0.0.0.0到最新版本)重定向到您擁有的版本。 –