zoukankan      html  css  js  c++  java
  • 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);
        }
    }

         目前还在积极探索中!

  • 相关阅读:
    Design Tutorial: Inverse the Problem
    The Number Off of FFF
    "Money, Money, Money"
    No Pain No Game
    Group
    Vases and Flowers
    Codeforces Round #466 (Div. 2)
    ST表
    Wildcard Matching
    HDOJ 3549 Dinitz
  • 原文地址:https://www.cnblogs.com/seekdream/p/5087527.html
Copyright © 2011-2022 走看看