Не удалось загрузить файл или сборку "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

У меня были проблемы с этим, и я сделал следующее:

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.

Ответ 9

Настройка "msvcp120.dll" и "msvcr120.dll" на "Copy Always" помогла мне.