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

时间:2017-10-27 09:27:12

标签: .net wpf xaml chromium cefsharp

使用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 个答案:

答案 0 :(得分:1)

<强>更新

如果您的项目是针对.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. 3.try now。

    原始答案

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

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

    请参阅此FAQ,这会有所帮助。

    我将在这里总结一下

      
        
    1. 为什么我收到错误&#34;无法加载文件或程序集&#39; CefSharp.Core.dll&#39;或其中一个依赖?找不到指定的模块。&#34;在尝试运行基于CefSharp的应用程序时?它编译成功,但不运行?它在我的开发者机器上运行,但是当我将它复制到另一台计算机时抛出异常?
    2.         

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

      之一      

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

           

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

           

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

答案 1 :(得分:1)

所以经过长时间的努力,我终于解决了这个问题。相当愚蠢的错误,我在所需的安装路径上缺少一些文件,这些文件也在链接中指定:
Output files description table (Redistribution)

关于WiX安装程序,我曾就SO问过另一个问题,基本上在安装路径中包含了所有文件后,我就可以对其进行调试并使其正常工作。

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