背景:
项目中使用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;
}
}