【问题标题】:System.Windows.Markup.XamlParseException: 'CefSharp.Wpf.ChromiumWebBrowser' threw exception. Inner Exception: could not load CefSharp.Core.dllSystem.Windows.Markup.XamlParseException: 'CefSharp.Wpf.ChromiumWebBrowser' 抛出异常。内部异常:无法加载 CefSharp.Core.dll
【发布时间】:2018-04-08 20:48:11
【问题描述】:

使用 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);

已经搜索了很多解决此问题的方法,但在我的情况下似乎都没有,任何帮助将不胜感激。

【问题讨论】:

    标签: .net wpf xaml chromium cefsharp


    【解决方案1】:

    所以在苦苦挣扎了这么久之后,我终于修复了它。非常愚蠢的错误,我在所需的安装路径中缺少一些文件,这些文件也在链接中指定:
    Output files description table (Redistribution)

    我在 SO 上提出了另一个关于 WiX 安装程序的问题,基本上在安装路径中的所有文件都已安装后,我能够对其进行调试并使其正常工作。

    链接到我的另一个问题 (WiX):
    WiX installer project: CefSharp.Core.dll could not be loaded, file not found

    【讨论】:

      【解决方案2】:

      更新

      如果您的项目面向 .NET Framework 4.5,那么您必须将项目的 .NET 框架更改为 4.6

      1. 将名为 Nuget.Config 的文件添加到解决方案(而不是任何项目)
      2. 将以下内容添加到该文件中

        <?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>
        

      3.立即尝试。

      原答案

      我之前遇到过这个异常,我想你需要调用Initialize 方法,我记得。

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

      看看这个FAQ会很有帮助。

      这里总结一下

      1. 为什么会出现“无法加载文件或程序集 'CefSharp.Core.dll' 或其依赖项之一?找不到指定模块”的错误消息。尝试运行基于 CefSharp 的应用程序时?它编译成功,但没有运行?它在我的开发者机器上运行,但是当我将它复制到另一台计算机时抛出异常?

      这是一个常见错误,通常是以下错误之一

      需要 VC++ 2012/2013 Redistributable Package 才能在非开发人员机器上运行 CefSharp。有关更多信息,请参阅下面的常见问题解答 #6。您可以将所需的 dll 作为应用程序的一部分。 并非所有依赖项都存在于执行文件夹中。 CefSharp 包括非托管 dll 和资源,它们通过安装 NuGet 包时包含在项目中的两个 .props 文件复制到执行文件夹。请参阅下面的所需文件列表,确保存在所需文件。 您通过安装程序打包了应用程序以进行分发,但它不在目标计算机上运行。默认情况下,安装程序不包含非托管资源,您需要手动添加它们。对于 ClickOnce,请参阅 #1314 了解其他用户提出的一些指示和解决方案。 可以在此处找到所需文件的列表:输出文件描述(重新分发)

      注意:如果在 XAML 中初始化 WPF 控件时遇到 FileNotFoundException,这也适用。

      注意 2:如果从源代码编译(不推荐,使用 NuGet 包)并且您注意到您无法再在调试模式下构建,但发布构建工作正常,您可能需要修复您的 Visual Studio 版本。在极少数情况下会发生这种情况,您会收到与缺少的非托管 .dll 文件完全相同的消息,如上所示。

      【讨论】:

      • 在我调试之前它只会崩溃并且错误显示在 VS 上,但是在添加后我的应用程序仍然运行并在应用程序中显示异常。但是,现在只有一个错误:could not load CefSharp.Core.dll
      • @SuhaibAhmad 你能检查一下'debug/bin'文件夹中是否存在 CefSharp.Core 吗?
      • 是的,它存在于我的 x86 和 x64 文件夹下的 debug 和 release 文件夹中
      • @SuhaibAhmad 你的机器上安装了“VC++ 2012/2013 Redistributable”吗?你可以从控制面板的卸载程序中检查这个吗?
      • 是的,我已经安装了 VC++ 2013 x86。但刚刚意识到我也安装了 VC++ 2017(x86 和 x64),这可能是原因吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2013-05-24
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多