我有一个WPF DLL 项目,其中包含我自定义控件,主题,样式等,它们构建为AnyCPU。
我依赖于开源Web浏览器控件,它没有本机AnyCPU支持,但确实有单独的x86 / x64程序集。
在EXE中,它非常简单。我可以处理64位进程的AppDomain.CurrentDomain.AssemblyResolve事件检查,并使用正确的程序集执行Assembly.LoadFile。
如何在 DLL 项目中动态解析运行时的依赖关系?
答案 0 :(得分:0)
在我的WPF DLL中,我有一个使用开源Web浏览器控件的自定义控件类。
在自定义控件的静态构造函数中,我为AppDomain.CurrentDomain.AssemblyResolve
事件设置了一个处理程序。
对于我的经纪人:
private static Assembly Resolver(object sender, ResolveEventArgs args)
{
if(args.Name.StartsWith("CefSharp"))
{
string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll";
string archSpecificPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "CefSharp", Environment.Is64BitProcess ? "x64" : "x86", assemblyName);
return File.Exists(archSpecificPath) ? Assembly.LoadFile(archSpecificPath) : null;
}
return null;
}
在处理程序中,我检查是否正在解析CefSharp程序集,如果是,我根据我的程序集是否在64位进程中运行,创建一个正确程序集的路径,然后执行{ {1}}。
我希望这有用!