20

我正在尝试使用 CefSharp 将我的网络应用程序加载到 winfoms 中。我已将 2 个 dll 文件:CefSharp.dll 和 CefSharp.WinForms 添加到引用中,并通过添加现有项目将 2 个 dll 文件 icudt.dll 和 libcef.dll 添加到我的项目中。
在此处输入图像描述

这是表格中的代码

public WebView web_view;

public Form1()
{
     InitializeComponent();
     web_view = new WebView("http://localhost:8084/wsmill",new CefSharp.BrowserSettings());
     web_view.Dock = DockStyle.Fill;
     toolStripContainer1.ContentPanel.Controls.Add(web_view);
     CefSharp.CEF.Initialize(new Settings());
}

运行应用程序时,出现此错误

WindowsFormsApplication1.exe 中出现“System.IO.FileLoadException”类型的未处理异常附加信息:无法加载文件或程序集“CefSharp.dll”或其依赖项之一。动态链接库 (DLL) 初始化例程失败。(HRESULT 异常:0x8007045A)

所以哪位知道的请帮帮我,谢谢

4

11 回答 11

25

你需要把这些文件

libcef.dll
icudtl.dat
CefSharp.dll
CefSharp.WinForms.dll

进入您的bin\Debug(或bin\Release,根据您的配置)。

请不要忘记安装Visual C++ 2012 Redistribution(Visual C++ 2013 Redistributable since version 43)。如果您不这样做,Visual Studio 将始终显示一个异常,指出未找到 CefSharp.dll,即使您已经拥有它。

于 2013-10-29T15:05:19.097 回答
7

这是一个常见错误,它是由于输出目录中没有所有必需的文件(bin\Debug 或 bin\Release,具体取决于您在 Visual Studio 中运行的配置)。CefSharp.dll是一个基于 .NET 的 DLL,它依赖于其他 .dll 文件,而后者又进一步依赖于其他 .dll 和其他文件。

以下是最低要求文件的列表:

  • libcef.dll(核心 Chromium DLL,它基本上包含 Web 浏览器 + 我们依赖的 CEF 可嵌入接口)
  • icudt.dll(Chromium 的 Unicode DLL,也必须存在)
  • CefSharp.dll(包含核心 CefSharp 功能的托管 .NET 程序集)
  • CefSharp.WinForms.dllCefSharp.WPF.dll(取决于您的项目类型)

请参阅CefSharp - 常见问题

于 2013-08-13T08:01:50.153 回答
7

我也遇到了这个问题,我做了以下事情:

CefSharp.DependencyChecker没有报告任何遗漏,但我一打电话给新CefSharp.Wpf.ChromiumWebBrowser()的,异常就发生了。

我使用 ILSpy 检查了所有 ms.net CEF dll,发现其中一些 DLL 也位于 GAC 中。一旦我将它们从 GAC 中删除,一切正常!

于 2016-02-25T15:58:25.053 回答
6

这是一个常见问题,因此在常见问题解答第 3 号问题中有所提及。

@AcccessDenied 是对的。这些文件需要存在于您的输出文件夹(bin\Debug 或 bin\Release)中。实现此目的的一种方法是使用Post-Build操作,该操作可以在 Visual Studio 的项目设置下进行设置。

您还可以在文件中设置后期构建.csproj,有点像这样:

<Target Name="AfterBuild">
  <ItemGroup>
    <CefBinaries Include="$(SolutionDir)CEF\$(UnmanagedPlatform)\*.*" />
    <LocaleFiles Include="$(SolutionDir)CEF\locales\*.*" />
    <SubProcessFiles Include="$(SolutionDir)$(UnmanagedPlatform)\$(Configuration)\CefSharp.BrowserSubprocess.exe" />
  </ItemGroup>
  <Copy SourceFiles="@(CefBinaries)" DestinationFolder="$(TargetDir)" />
  <Copy SourceFiles="@(LocaleFiles)" DestinationFolder="$(TargetDir)locales" />
  <Copy SourceFiles="@(SubProcessFiles)" DestinationFolder="$(TargetDir)" />
</Target>

(此示例取自 CefSharp 源代码 CefSharp3 分支中的CefSharp.Wpf.Example项目。具体文件位置可能因您的情况而异,尤其是在使用 CefSharp1 时,因此请根据需要进行调整以确保正确复制文件。 )

我不建议将东西放入 bin\Debug 或 bin\Release 并使用Copy Always. 对我来说,这感觉就像一个杂物。

于 2013-10-26T18:50:22.350 回答
3

我的离线 CEF 工作正常,然后在将解决方案升级到核心 3.1 后突然停止工作。仍然不知道为什么,但是复制资源、VC++ 运行时等以及其他常见的解决方案都不起作用。我在启动代码中添加了以下代码用于诊断目的,突然间,CEF 再次工作。程序集在同一路径中,但似乎将它们加载到程序集活页夹中。如果有人同样感到沮丧,可以尝试使用您正在使用的任何 CEF 程序集变体的类似方法。也许一些 .net 大师可以准确地解释为什么这会有所帮助。

  try
  {
    Assembly asm;
    string path;

    path = Path.Combine(
      Directory.GetCurrentDirectory(),
      "CefSharp.Core.dll");
    asm = Assembly.LoadFrom(path);
    path = Path.Combine(
      Directory.GetCurrentDirectory(),
      "CefSharp.OffScreen.dll");
    asm = Assembly.LoadFrom(path);
  }
  catch (Exception exception)
  {
    System.Diagnostics.Trace.WriteLine(exception.Message + " @ " + exception.StackTrace);
  }

*** 在@amaitland 提供相关信息后,以下更新,谢谢!根据https://github.com/cefsharp/CefSharp.MinimalExample#net-core-support我更新了我的项目以包括:

<ItemGroup>
  <Reference Update="CefSharp">
    <Private>true</Private>
  </Reference>
  <Reference Update="CefSharp.Core">
    <Private>true</Private>
  </Reference>
  <Reference Update="CefSharp.OffScreen">
    <Private>true</Private>
  </Reference>
</ItemGroup>

它不再需要以前的代码块来开箱即用。如果有人像我一样遇到困惑,那么将 privateassets all 添加到 PACKAGE 引用中并不是一回事。除了输入这些行之外,您还可以在解决方案资源管理器中为您的项目展开“程序集”,然后右键单击那里的 CefSharp 程序集并将 CopyLocal 更改为 Yes。再次感谢@amaitland

于 2020-01-20T00:07:22.200 回答
0

您必须将文件的“复制到输出”属性设置为“始终复制”或“如果更新则复制”。如 Coder 所述,这会将所有文件复制到输出目录。

于 2013-08-13T08:16:55.597 回答
0
  1. 确保将所有依赖库复制到调试/发布文件夹
  2. 如果您自己构建 CEFSharp 库,请确保构建配置匹配。也就是说,如果您在 x86 发布模式下构建应用程序,那么您还必须在 x86 发布模式中构建 CEFSharp 库。否则会抛出 dll not found 错误
于 2020-09-10T19:05:43.927 回答
0

推荐的方法似乎是使用 NuGet 包。即使这样,您也需要进行一些非直观的更改,但它们已记录在案。新安装软件包时,会打开一个 readme.txt 文件,其中包含最常见的问题。

就我而言,我失踪了(x64 也可用)

<probing privatePath="x86" />

我的 App.config 看起来像这样(其中包含 CommonServiceLocator,如果没有,请忽略该部分)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="x86" />

      <dependentAssembly>
        <assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.3.0" newVersion="2.0.3.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

出现该错误是因为您将项目设置为 AnyCPU 时 bin 文件夹中确实没有 Cefsharp DLL。但是在下面的 x86 和 x64 文件夹中,您在添加此行时正在探测该 DLL 存在。临时解决方法是将内容从 /bin/x86 复制到 /bin。

如果需要 AnyCpu,则需要将 CefSharpAnyCpuSupport 添加到 csproj 文件中。需要设置 Prefer 32bit 的项目标志。

于 2018-08-14T23:02:52.130 回答
0

在此处输入图像描述

我发现其中一个项目平台被称为 x64。我将其更改为“任何 CPU”,它工作正常。

于 2020-12-18T22:11:47.407 回答
0

就我而言,我按照CefSharp - Our Code World中概述的步骤进行操作。

而不是按照步骤 A 并添加CefSharpAnyCpuSupportincsprojprobingin App.config,只需在步骤 B 中设置Platform Targetto就可以了。x86

于 2018-06-25T12:36:44.823 回答
-2

将“msvcp120.dll”和“msvcr120.dll”设置为“始终复制”对我有帮助。

于 2016-08-11T15:22:04.973 回答