无法加载文件或程序集“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 / aefb5ccce879f308f0bcc3ac719c86defe2f9715 / 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.dll或CefSharp.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”设置为“始终复制”对我有所帮助。