vs公共库中如何使CefSharp与配置AnyCPU一起使用

时间:2018-09-18 20:56:09

标签: c# wpf cefsharp

我创建了一个带有WPF窗口的类库项目。在一个WPF窗口中,我想要一个CefSharp浏览器。我的项目应配置为 AnyCPU 。在不同的教程中,我看到了使用CefSharp调整可执行项目中的 AnyCPU 配置的要点之一是设置( csproj

<Prefer32Bit>true</Prefer32Bit>

但是在类库项目中,此属性被禁用。 如何在我的类库中为CefSharp启用AnyCPU支持?

1 个答案:

答案 0 :(得分:1)

请参阅文档:General Usage Guide

有多种解决方案可启用AnyCPU支持。我使用了以下内容:

首先,通过NuGet安装依赖项。

然后,将<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>添加到包含PropertyGroup控件的.csproj PackageReference CefSharp.Wpf文件的第一个CefSharp.Wpf.ChromiumWebBrowser

现在,编写一个Assembly Resolver来根据当前体系结构找到正确的非托管DLL:

AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;

private Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.StartsWith("CefSharp"))
    {
        string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll";
        string architectureSpecificPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
            Environment.Is64BitProcess ? "x64" : "x86",
            assemblyName);

        return File.Exists(architectureSpecificPath)
            ? Assembly.LoadFile(architectureSpecificPath)
            : null;
    }

    return null;
}

最后,至少使用以下设置初始化CefSharp:

var settings = new CefSettings()
{
    BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
        Environment.Is64BitProcess ? "x64" : "x86",
        "CefSharp.BrowserSubprocess.exe")
};
Cef.Initialize(settings);