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

Kie*_*goc 19 c# winforms cefsharp

我正在尝试使用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());
}
Run Code Online (Sandbox Code Playgroud)

运行应用程序时,我收到此错误

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

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

Toa*_*yen 23

你需要把这些文件

libcef.dll
icudtl.dat
CefSharp.dll
CefSharp.WinForms.dll
Run Code Online (Sandbox Code Playgroud)

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

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

希望这有帮助.

  • 安装后,Visual C++ 2012 Redistribution,它的工作原理 (4认同)
  • 至少在我的安装中,第二个文件应该是 icudtl.dat,而不是 icudt.dll。注意“.dat”之前“t”之后的“l”。 (2认同)

Kur*_*ran 6

这是一个常见错误,原因是输出目录中不存在所有文件(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(取决于您的项目类型)

查看此链接了解更多详情

  • 那么我怎么能添加libcef和icudt,我知道它是win32 dll而不是.net dll所以我不能像引用那样添加它,按照微软的说明,我上面做了,但它没有用. (4认同)

Per*_*erg 6

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

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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


uTI*_*Ity 6

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

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

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