无法加载文件或程序集“CefSharp.dll”或其依赖项之一

我正在尝试使用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”类型的exception附加信息:无法加载文件或程序集“CefSharp.dll”或其依赖项之一。 动态链接库(DLL)初始化例程失败。 (HRESULTexception:0x8007045A)

所以任何了解这一点的人都请帮助我,谢谢

你需要把这些文件

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

进入你的bin \ Debug (或你的配置的bin \ Release

并且请不要忘记安装Visual C ++ 2012 Redistribution (Visual C ++ 2013 Redistributable自版本43),如果您不这样做,Visual Studio将始终显示exception,告诉您找不到CefSharp.dll,尽管您已经拥有它!

希望这有帮助。

这是一个常见问题,因此在常见问题解答中提到,问题3。

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

您还可以在.csproj文件中设置post-build,有点像这样:

           

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

我不建议将东西放在bin \ Debug或bin \ Release中,并使用Copy Always将其添加到解决方案中。 这对我来说感觉像是一块垃圾。

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

  • 检查所有文件是否在apps根目录中( https://github.com/cefsharp/CefSharp/wiki/Output-files-description-table-%28Redistribution%29和https://bitbucket.org/chromiumembedded/cef/ src / aefb5ccce879f308f0bcc3ac​​719c86defe2f9715 / tools / distrib / win / README.redistrib.txt?at = master&fileviewer = file-view-default )
  • 确保安装了C ++ Redist(实际上我已经安装了2010年,2013年,2015年的所有x86和x64)
  • 在启动期间添加了以下代码以确保所有依赖项都存在

      string dir = AppDomain.CurrentDomain.BaseDirectory; var missingDeps = CefSharp.DependencyChecker.CheckDependencies(true, false, dir, string.Empty, Path.Combine(dir, "CefSharp.BrowserSubprocess.exe")); if (missingDeps?.Count > 0) throw new InvalidOperationException("Missing components:\r\n " + string.Join("\r\n ", missingDeps)); // ReSharper disable once UnusedVariable var browser = new CefSharp.Wpf.ChromiumWebBrowser(); //test, if browser can be instantiated 

CefSharp.DependencyChecker没有报告任何遗漏,但是当我调用新的CefSharp.Wpf.ChromiumWebBrowser()发生了exception。

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

这是一个常见错误,原因是输出目录中不存在所有文件(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 (包含核心CefSharpfunction的托管.NET程序集)
  • CefSharp.WinForms.dllCefSharp.WPF.dll (取决于您的项目类型)

查看此链接了解更多详情

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

就我而言,我遵循了CefSharp – 我们的代码世界中概述的步骤。

而不是在csproj中跟随步骤A并添加CefSharpAnyCpuSupport并在App.config probing ,而只需在步骤B中将Platform Target设置为x86

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

在我的情况下,我失踪了(x64也可用)

  

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

                

发生此错误是因为当您将项目设置为AnyCPU时,bin文件夹中确实没有Cefsharp DLL。 但是在x86和x64文件夹中,在您添加此行时,您正在探测DLL存在。 临时修复是将/ bin / x86中的内容复制到/ bin。

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

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