Не удалось загрузить файл или сборку "CefSharp.dll" или одну из ее зависимостей
Я пытаюсь использовать CefSharp для загрузки моего веб-приложения в winfoms. Я добавил 2 файла dll: CefSharp.dll и CefSharp.WinForms в ссылки и добавьте 2 файла dll icudt.dll и libcef.dll в свой проект, добавив существующие элементы.
![enter image description here]()
и это код из формы
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());
}
При запуске приложения я получил эту ошибку
Произошло необработанное исключение типа "System.IO.FileLoadException" в WindowsFormsApplication1.exe Дополнительная информация: Не удалось загрузить файл или сборку "CefSharp.dll" или одну из ее зависимостей. Динамическая библиотека ссылок (DLL). (Исключение из HRESULT: 0x8007045A)
Итак, любой, кто знает об этом, помогите мне, спасибо
Ответы
Ответ 1
Вам нужно поместить эти файлы
libcef.dll
icudtl.dat
CefSharp.dll
CefSharp.WinForms.dll
в папку bin\Debug (или bin\Release в вашей конфигурации)
И не забудьте установить Распространение Visual С++ 2012 (Visual С++ 2013, распространяемый с версии 43), если вы не используете Visual Studio, всегда будет отображаться исключение Скажите, не нашли CefSharp.dll, хотя у вас уже есть это!
Надеюсь на эту помощь.
Ответ 2
Это обычная проблема и поэтому упоминается в часто задаваемых вопросах, вопрос номер 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.Wpf.Example в исходном коде CefSharp, ветке CefSharp3. Точные местоположения файлов могут отличаться в вашем в случае использования CefSharp1, поэтому при необходимости адаптируйте его, чтобы обеспечить правильное копирование файлов.)
Я не рекомендую помещать вещи в bin\Debug или bin\Release и добавлять их к решению с помощью Copy Always
. Для меня это похоже на клочок.
Ответ 3
У меня были проблемы с этим, и я сделал следующее:
- проверьте, что все файлы находятся в корневом каталоге приложений (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)
- удостоверился, что С++ 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()
, возникло исключение.
Я проверил все DLL файлы ms.net CEF с помощью ILSpy и обнаружил, что некоторые из этих DLL также находятся в GAC. Как только я удалил их из GAC, все работало нормально!
Ответ 4
Это распространенная ошибка, вызванная тем, что не все файлы присутствуют в выходном каталоге (bin\Debug или bin\Release, в зависимости от того, какую конфигурацию вы используете в Visual Studio). CefSharp.dll
- это DLL-библиотека на основе .NET, которая зависит от других DLL файлов, что, в свою очередь, зависит от других DLL файлов и других файлов...
Вот список минимально необходимых файлов:
- libcef.dll (ядро Chromium DLL, которое в основном содержит веб-браузер + интерфейс встраиваемости CEF, от которого мы зависим)
- icudt.dll (Unicode DLL для Chromium, также должна присутствовать)
- CefSharp.dll (управляемая сборка .NET, которая содержит основные функциональные возможности CefSharp)
- CefSharp.WinForms.dll ИЛИ CefSharp.WPF.dll (в зависимости от типа вашего проекта)
Проверьте эту ссылку для более подробной информации
Ответ 5
Вы должны установить свойства "копировать для вывода" файлов на "копировать всегда" или "копировать, если они более новые".
Это копирует все файлы в выходной каталог, как указано Coder.
Ответ 6
В моем случае я следовал шагам, изложенным в CefSharp - Наш Кодовый Мир.
Вместо того, чтобы следовать шагу A и добавить CefSharpAnyCpuSupport
в csproj
и probing
в App.config
, просто установив Platform Target
значение x86
на шаге B, добился Platform Target
.
Ответ 7
Рекомендуется использовать пакет 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>
Ошибка возникает из-за того, что в папке bin действительно нет библиотеки Cefsharp DLL, когда вы устанавливаете проект в AnyCPU. Но в папке x86 и x64 ниже, где вы проверяете, добавляя эту строку, DLL существует. Временное исправление - копировать содержимое из /bin/x86 в /bin.
Если требуется AnyCpu, CefSharpAnyCpuSupport необходимо добавить в файл csproj. Необходимо установить флаг проекта для Prefer 32bit.
Ответ 8
У CEF Sharp есть часто задаваемые вопросы, и это один из их наиболее часто задаваемых вопросов. У них есть список шагов, чтобы попытаться решить эту проблему:
https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#Runtime_dependencies
Ответ 9
Настройка "msvcp120.dll" и "msvcr120.dll" на "Copy Always" помогла мне.