在C#DLL中动态解析运行时的依赖关系

时间:2016-09-12 20:56:01

标签: c# .net wpf dll .net-assembly

我有一个WPF DLL 项目,其中包含我自定义控件,主题,样式等,它们构建为AnyCPU。

我依赖于开源Web浏览器控件,它没有本机AnyCPU支持,但确实有单独的x86 / x64程序集。

在EXE中,它非常简单。我可以处理64位进程的AppDomain.CurrentDomain.AssemblyResolve事件检查,并使用正确的程序集执行Assembly.LoadFile。

如何在 DLL 项目中动态解析运行时的依赖关系?

1 个答案:

答案 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}}。

我希望这有用!