天天看點

Prism架構中引用第三方類DLL提示無法加載程式集

     Prism架構是采用一種依賴注入的方式動态加載程式集,能夠在程式需要加載的時候将程式集注入到裡面去,實作程式的熱插拔效果,而且采用這種架構能夠讓我們進行一個大項目的獨立開發,在最近的一個項目中在獨立開發的一個子產品中,引用了第三方的一個控件DateTimePicker,在我們的項目中引用了該程式集xceed.wpf.toolkit.dll,但是在我們啟動整個項目的時候總是找不到xceed.wpf.toolkit.dll,我們開發的項目是放在Apps檔案夾下面的,但是在該檔案夾下面明明已經放置了該dll但是主程式架構還是會提示該錯誤,這個問題一直沒有解決,後來在stackoverflow.com網站上看到别人的回複。

I know that this is a very old question but I happened to run across this exact error not too long ago. If your visual studio application uses two projects or a project that references another project, I would check to make sure 
that BOTH projects have the extended toolkit installed.        

  大緻的意思是必須同時将xceed.wpf.toolkit.dll拷到主程式架構和調用的程式集檔案夾中并且缺一不可,這個問題我直到現在很困惑,有些程式集不會出現這種類型的問題,但是有些又會報這種找不到程式集的錯誤,可能是引用第三方dll的問題吧,現在還在探索中。

     另外還提到了另外一種方式就是通過在主架構的App.cs中捕獲該異常,并且來動态加載dll,這種方式也是可行的,但是終究治标不治本。

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args )
{
    if (args.Name.ToUpper().StartsWith("XCEED.WPF"))
    {
       string asmLocation = Assembly.GetExecutingAssembly().Location;

       string asmName = args.Name.Substring(0, args.Name.IndexOf(','));
       string filename = Path.Combine( asmLocation, asmName );

       if (File.Exists(filename)) return Assembly.LoadFrom(filename);
    }
}      

     目前還在積極探索中!