1. 程式人生 > >使用C#開發ActiveX控制元件,封裝到瀏覽器使用,出現找不到XXXX.dll的異常解決

使用C#開發ActiveX控制元件,封裝到瀏覽器使用,出現找不到XXXX.dll的異常解決

背景:

專案中使用C#開發一款元件,用於Tomcat+Jsp專案中,在瀏覽器中通過Active元件的方式呼叫,部分功能會出現找不到 XXX.dll的問題。

異常原因:

通過瀏覽器呼叫C# Active控制元件時,預設到IE瀏覽器的Bin目錄下尋找 控制元件的dll檔案,所以引發該異常。

解決方案:

 public XXXActive()
        {
            InitializeComponent(); 
            CheckForIllegalCrossThreadCalls = false;

            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        }

        /// <summary>
        /// 未處理異常
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
           //("未處理異常 : "+e);
        }

        /// <summary>
        /// 載入非預設位置的程式集
        /// </summary> 
        public Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
        {
            try
            {
                if (e.Name.Split(',')[0] == "XXXActive")
                {
                    var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

                    if (null == dir) return null;

                    Environment.CurrentDirectory = dir;
                    var path = Path.Combine(Environment.CurrentDirectory, "XXXActive.dll");
                    return Assembly.LoadFrom(path);
                }
                return null;
            }
            catch (Exception)
            { 
                return null;
            } 
        }