CefSharp - 无法加载文件或程序集“CefSharp.Core.dll”或其依赖项之一
Posted
技术标签:
【中文标题】CefSharp - 无法加载文件或程序集“CefSharp.Core.dll”或其依赖项之一【英文标题】:CefSharp - Could not load file or assembly 'CefSharp.Core.dll' or one of its dependencies 【发布时间】:2017-07-10 23:33:56 【问题描述】:我已经在 CefSharp WinForms 应用程序上工作了几个星期,我没有遇到任何问题。今天早上,在向应用程序添加一些东西时,我尝试运行它来测试一些东西并得到以下错误:
System.IO.FileNotFoundException 未处理 消息:未处理 “System.IO.FileNotFoundException”类型的异常发生在 mscorlib.dll 附加信息:无法加载文件或程序集 'CefSharp.Core.dll' 或其依赖项之一。指定模块 找不到。
搜索了一段时间后发现:
https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#Runtime_dependencies
我检查了项目的 bin/Debug/x86 并且所有依赖项似乎都存在。更重要的是,它在 5 分钟前运行良好,除了实体框架迁移的单个类之外,我没有触及任何东西。
我已经尝试清理和重建解决方案,重新启动 Visual Studio,重新启动我的 PC,并清除 /bin/Debug,但这些都没有帮助。
为什么几天没有出现这个错误,我该如何解决这个问题?
编辑:我做了一些进一步的试验,我能够让应用程序在发布模式下运行,但不是在调试模式下运行。如果我将Release模式的输出路径更改为Debug,它会失败并出现同样的错误(同样,它在使用Release输出路径的Debug中成功)。
【问题讨论】:
【参考方案1】:首先,确保您安装了 VC++ 发行版:
CefSharp v65 及更高版本:下载 VC++ 2015 Redist 旧 CefSharp 版本:使用 VC ++ 2013 Redist您可以从https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads下载正确的版本
其次,我之前没有看到人们提到这个,我在处理这个问题几个小时后找到了这个解决方案:
某些 CefSharp 版本需要 CRT 包。请在“C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs”中找到它们,选择正确的版本文件夹(x86 或 x64,取决于您的 CefSharp 目标),将所有文件复制到项目的发布文件夹中。
【讨论】:
如果你安装了正确的VCRedist
,那么你应该不需要任何与Universal CRT
相关的东西。阅读blogs.msdn.microsoft.com/vcblog/2015/03/03/…的Distributing Software that uses the Universal CRT
部分
VC++ 2015 Redist install 为我修复了它。【参考方案2】:
在安装以下可再发行组件之前,我遇到了同样的问题:
【讨论】:
我遇到了这个错误,当客户端有 Microsft Visual C++ 2015 Redistributable (x86) 卸载 Microsft Visual C++ 2015 Redistributable (x86),然后安装Microsft Visual C++ 2015-2019 Redistributable (x86) - 14.28.29325
版本,解决了与主题类似的错误,如下异常:System.BadImageFormatException: Failed to load the file 'CefSharp.Core.dll' or its integrated code or one of its dependencies. is not a valid Win32 application. (HRESULT returned exception: 0x800700C1)
@LysanderM 是的,我也碰到过,问题是那个版本不容易找到:(
是的,这是 2 周的噩梦。感谢您的信息。
兄弟,谢谢你救了我。
完全明白,这让我泪流满面【参考方案3】:
SuperBerry 安装 VC++ 再分发包的解决方案为我解决了这个问题。我只是从我幼稚的角度提供一些故障排除见解。
错误信息很清楚,要么是缺少 assemble CefSharp.Core.dll,要么是它的依赖项之一。所以问题归结为您如何找出缺少的内容?
首先,你有 CefSharp.Core.dll 吗?在解决方案资源管理器中查看有此问题的项目的参考资料。您应该找到对 CefSharp.Core 的引用。如果找不到,则说明您错过了该程序集。如果你有一个,那么问题是你缺少它所需的依赖项之一。当您单击 CefSharp.Core 参考时,在详细信息中,您将获得它所在位置的完整路径。就我而言,它位于 'C:\Users\tom\source\repos\MyProject\src\packages\CefSharp.Common.41.0.0\CefSharp\x86\CefSharp.Core.dll'。
然后,您需要获取 CefSharp.Core 依赖项的列表,以确定您缺少哪个依赖项。 Dumpbin.exe 是一个命令行工具,可用于获取依赖项列表。为了使用 dumpbin,您需要确保它可以在系统环境变量的路径中找到。我在 VC Tools bin 目录的路径上找到了。就我而言,我在以下位置找到了一个:'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64'。打开命令提示符终端并导航到包含 CefSharp.Core.dll 的文件夹并键入以下内容:
>dumpbin /dependents CefSharp.Core.dll
我得到的结果是:
Dump of file CefSharp.Core.dll
File Type: DLL
Image has the following dependencies:
KERNEL32.dll
MSVCP110.dll
MSVCR110.dll
libcef.dll
USER32.dll
mscoree.dll
多年没有使用 Microsoft Visual Studio,我不得不尝试找出这些依赖项的位置,以便解决它们。我只是对每个 dll 进行了互联网搜索,例如“Kernel32.dll 位于哪里”,直到找到丢失的 dll。就我而言,我找不到 MSVCR110.dll,所以我强烈怀疑这是我的问题。然后我在互联网上搜索“MSVCR110.dll is missing”,发现它是 vc++ 重新分发的一部分。 (SuperBerry,你的第一点是对的)。我还发现它可以从以下位置下载:'https://www.microsoft.com/en-us/download/details.aspx?id=30679'。我下载了 x86 和 x64 版本(虽然我只需要这个项目的 x86 版本)。它们是运行时安装它们的可执行文件。安装它们后,我在“C:\Windows\SysWOW64”和“C:/Windows\System32”中找到了它的副本。这个问题很快就解决了。
我从这个过程中学到的是,很难知道您是否安装了正确的 VC++ 再分发包。我以为我会在安装 Visual Studio 并启用 VC++ 功能时安装。我正在使用 Visual Studio 社区版本 2019。我正在使用的项目是我从 GitHub 源克隆的项目。我仍然对 VC++ 重新分发版本控制感到困惑。例如,我是否可以安装一些更高版本并且它可以工作(即向后兼容)?
【讨论】:
见docs.microsoft.com/en-us/cpp/porting/… 通常最好提出一个新问题,而不是在回答中提出一个问题。 该文档有助于我了解发生了什么。我克隆了一个针对 .netframework 4.0 的 GitHub 项目。当我克隆项目时,我可能有机会针对更高版本,我认为将其保留为目标版本会让我更容易。通过以 4.0 版本为目标,这使项目依赖于我没有安装的 vc++ redistributable VS 2012。如果我让项目迁移到当前的 .framework,这个问题就不会发生,因为我确实安装了当前的 vc++ redist。 CefSharp 版本规定了所需的 vc++ 版本。您克隆的项目使用的是 5 年前的版本。见github.com/cefsharp/CefSharp/releases和github.com/cefsharp/CefSharp#release-branches github.com/cefsharp/CefSharp.MinimalExample 始终保持最新状态,可用于测试最新版本。 感谢 amaitland,您的权利。我从来没有看过 CefSharp 的全部内容。我认为这是一个在创建项目时自动添加到项目中的引用,并且基于错误的假设,我认为它被添加是因为它是一个 .networkframe 4.0 项目(错误!)。我以为它是一些 c# 支持库,但它是一个铬嵌入式框架。当我做错事时,我总是觉得自己像个白痴,但我感谢你的时间和努力。它帮助我向上移动。再次感谢!【参考方案4】:即使在发布模式下,我也遇到了同样的问题。通过GitHub CefSharp FAQs,NOTE 2 解决了我的问题。
如果从源代码编译(不推荐,使用 Nuget 包)并且您注意到您无法再在调试模式下构建,但发布构建工作正常,您可能需要修复您的 Visual Studio 版本。在极少数情况下会发生这种情况,您会收到与缺少的非托管 .dll 文件完全相同的消息,如上所示。
不得不修复 Visual Studio 并开始像以前一样工作。
【讨论】:
这个页面和票数证明它并不那么稀有......【参考方案5】:我有同样的问题。对我有用的是添加
<CefSharpBuildAction> Content </CefSharpBuildAction>
到您正在处理的项目的 csproj 中的第一个属性组。
【讨论】:
这一添加使我发布的应用程序版本正常工作,但它也将我的应用程序大小从 13.0MB 增加到 203.0MB。以上是关于CefSharp - 无法加载文件或程序集“CefSharp.Core.dll”或其依赖项之一的主要内容,如果未能解决你的问题,请参考以下文章
无法为 x64 和 x86 加载文件或程序集 'CefSharp.Wpf;只有一个作品
未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项
win 8系统:System.IO.FileNotFoundException: 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项。找不到指定的模块