System.Windows.Markup.XamlParseException: 'CefSharp.Wpf.ChromiumWebBrowser'抛出异常。内部异常: 无法加载CefSharp.Core.dll

4
在使用CefSharp和其ChromiumWebBrowser作为文档查看器的C# XAML Windows应用程序中工作。项目可以正常构建,但是每当我尝试使用Chromium在应用程序上打开/查看图像时,就会弹出一个错误:

System.Windows.Markup.XamlParseException:在类型CefSharp.Wpf.ChromiumWebBrowser上调用匹配指定绑定约束的构造函数引发异常

内部异常:FileNotFoundException:无法加载文件或程序集“CefSharp.Core.dll”或其某个依赖项

CefSharp.Common软件包已安装在项目中,CefSharp.Wpf软件包也已添加到项目中,并且我还将引用添加到了项目中。

这是我的ChromeControl.xaml:

<UserControl x:Class="Viewer.Chrome.ChromeControl">
    <-- namespaces defined here -->
    <Grid>
        <chrome:ChromiumWebBrowser Name="viewer" RenderOptions.BitmapScalingMode="HighQuality" TextOptions.TextRenderingMode="ClearType" />
    </Grid>
</UserControl>

这是我在Viewer.Chrome命名空间中的ChromeControl.xaml.cs文件:
public partial class ChromeControl : UserControl {
    public ChromeControl(ViewerWindow viewerWindow) {
            InitializeComponent();
            viewer.RegisterJsObject("chrome", new ChromeDomHelper(viewerWindow, viewer));
            viewer.MenuHandler = new ChromeContextMenu();
    }
    public ChromiumWebBrowser Viewer { get { return viewer; } }
}

我发现在我的Document Viewer.xaml.cs中的堆栈跟踪中开始了:

ChromeControl chrome = new ChromeControl(viewerWindow);

我已经搜索了很多方法来解决这个问题,但似乎都不适用于我的情况,希望能得到帮助,非常感谢。

2个回答

3

1

更新

如果您的项目目标是 .NET Framework 4.5,则需要将项目的 .NET Framework 更改为 4.6。

  1. Add a file with the name Nuget.Config to the Solution (not to any project)
  2. Add the following content to this file

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
          <packageSources>
              <add key="nuget.org" value="https://nuget.org/api/v2/" />
              <add key="cefsharp-myget" value="https://www.myget.org/F/cefsharp/" />
          </packageSources>
          <activePackageSource>
              <add key="All" value="(Aggregate source)" />
          </activePackageSource>
          <solution>
              <add key="disableSourceControlIntegration" value="true" />
          </solution>
    </configuration>
    
我曾经遇到过这个异常,我认为你需要调用Initialize方法,就像我记得的那样。

3. 现在尝试一下。

原始答案

我之前也遇到过这个异常,我想你需要调用Initialize方法,就像我记得的那样。

using CefSharp;

protected override void OnStartup(StartupEventArgs e)
{
      base.OnStartup(e);
      Cef.Initialize();
}

请查看这个常见问题解答,它会很有帮助。

我会在这里做一个总结。

当我尝试运行基于CefSharp的应用程序时,为什么会出现“无法加载文件或程序集'CefSharp.Core.dll'或其某个依赖项的错误?指定的模块无法找到。”的错误?它可以成功编译,但无法运行?尽管在我的开发机器上运行良好,但当我将其复制到另一台计算机上时会抛出异常?
这是一个常见的错误,通常是以下情况之一:
1. 在非开发计算机上运行CefSharp需要VC++ 2012/2013 Redistributable Package。有关更多信息,请参见下面的FAQ#6。您可以将所需的dll作为应用程序的一部分包含其中。
2. 执行文件夹中不存在所有依赖项。 CefSharp包括未管理的dll和资源,这些通过两个.props文件复制到执行文件夹中,这些文件在安装NuGet包时包含在您的项目中。请参见下面的所需文件列表,并确保所需文件存在。
3. 您使用安装程序打包了应用程序以进行分发,但它在目标计算机上无法运行。安装程序默认不包括未管理的资源,您需要手动添加它们。对于ClickOnce,请参见#1314以获取其他用户提出的一些提示和解决方案。
所需文件列表可以在此处找到:输出文件描述(Redistribution)
注意:如果在XAML中初始化WPF控件时出现FileNotFoundException,也适用于此。
注意2:如果从源代码编译(不建议使用NuGet包),并且您注意到无法再以调试模式构建,但发布版本可以正常工作,则可能需要修复您的Visual Studio版本。在极少数情况下会发生这种情况,其中您将获得与上述缺少未管理的.dll文件完全相同的消息。

之前当我调试时,它会直接崩溃并在VS上显示错误。但是在添加了那个之后,我的应用程序仍然运行,并在应用程序内显示异常。然而,现在只有一个错误:无法加载CefSharp.Core.dll。 - Suhaib Ahmad
@SuhaibAhmad你能检查一下CefSharp.Core在'debug/bin'文件夹中是否存在吗? - Hakan Fıstık
是的,它存在于我的调试和发布文件夹中,在x86和x64文件夹下都有。 - Suhaib Ahmad
@SuhaibAhmad 你的电脑上是否安装了“VC++ 2012/2013 Redistributable”?你可以从控制面板中的卸载程序中检查。 - Hakan Fıstık
另外,我正在使用 WPF 的 ChromiumWebBrowser 而不是 WinForm 的。我已经拥有所有文件和引用,但我仍然在我的应用程序中遇到一个异常,无法加载 cefsharp.core.dll。 - Suhaib Ahmad
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接