使用C#開發ActiveX控制元件,封裝到瀏覽器使用,出現找不到XXXX.dll的異常解決
阿新 • • 發佈:2019-02-15
背景:
專案中使用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; } }