web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'CefSharp.dll' ou l'une de ses dépendances

J'essaie d'utiliser CefSharp pour charger mon application Web dans WinFoms. J'ai ajouté 2 fichiers dll: CefSharp.dll et CefSharp.WinForms dans les références et ajouter 2 fichiers dll, icudt.dll et libcef.dll dans mon projet en ajoutant des éléments existants.
enter image description here

et ceci est le code du formulaire

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());
}

Quand j'ai lancé l'application, j'ai eu cette erreur

Une exception non gérée du type 'System.IO.FileLoadException' s'est produite dans WindowsFormsApplication1.exe Informations complémentaires: Impossible de charger le fichier ou l'assembly 'CefSharp.dll' ou l'une de ses dépendances. Une bibliothèque de liens dynamiques La routine d'initialisation (DLL) a échoué. (Exception de HRESULT: 0x8007045A)

Donc, tous ceux qui sont au courant, aidez-moi, merci

18
Kien Dang Ngoc

Vous devez mettre ces fichiers

libcef.dll
icudtl.dat
CefSharp.dll
CefSharp.WinForms.dll

dans votre bin\Debug (ou bin\Release base sur votre configuration)

Et s'il vous plaît n'oubliez pas d'installer Visual C++ 2012 Redistribution (Visual C++ 2013 Redistribuable depuis la version 43), si vous ne le faites pas, Visual Studio affichera toujours une exception, indiquez que CefSharp.dll n'a pas été trouvé bien que vous l'ayez déjà. l'avoir!

J'espère que cette aide.

20
Toan Nguyen

Je viens d'avoir des problèmes avec cela aussi et j'ai fait ce qui suit:

CefSharp.DependencyChecker n'a rien signalé manquant, mais dès que j'ai appelé new CefSharp.Wpf.ChromiumWebBrowser(), une exception s'est produite.

J'ai vérifié toutes les dlls CEF ms.net à l'aide de ILSpy et constaté que certaines de ces DLL étaient également situées dans le GAC. Dès que je les ai retirés du GAC, tout a bien fonctionné!

6
uTILLIty

Ceci est un problème courant et est donc mentionné dans la FAQ , question numéro 3.

@AcccessDenied a raison. Les fichiers doivent être présents dans votre dossier de sortie (bin\Debug ou bin\Release). Une façon de procéder consiste à utiliser une action Post-Build, qui peut être définie dans les paramètres du projet dans Visual Studio.

Vous pouvez également configurer la post-génération dans le fichier .csproj, un peu comme ceci:

<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>

(Cet exemple provient du CefSharp.Wpf.Example project du code source de CefSharp, branche CefSharp3. Les emplacements de fichiers exacts peuvent varier dans votre cas, en particulier si vous utilisez CefSharp1, donc adaptez-le selon vos besoins pour garantir les fichiers. être copié correctement.)

Je ne recommande pas de placer des éléments dans bin\Debug ou bin\Release et de les ajouter à la solution à l'aide de Copy Always. Cela ressemble à un kludge pour moi.

6
Per Lundberg

Il s'agit d'une erreur courante due à la non présence de tous les fichiers dans le répertoire de sortie (bin\Debug ou bin\Release, selon la configuration que vous exécutez dans Visual Studio). CefSharp.dll est un DLL basé sur .NET qui dépend d'autres fichiers .dll, qui dépend ensuite d'autres fichiers .dll et autres ...

Voici une liste des fichiers minimum requis:

  • libcef.dll (La DLL Chromium principale, qui contient essentiellement le navigateur Web et l'interface d'embeddabilité CEF sur laquelle nous dépendons)
  • icudt.dll (Unicode DLL pour Chromium, doit également être présent)
  • CefSharp.dll (Assemblée .NET gérée contenant la fonctionnalité de base de CefSharp )
  • CefSharp.WinForms.dll OR CefSharp.WPF.dll (en fonction de votre projet Type)

Consultez ce lien pour plus de détails

5
Kurubaran

Vous devez définir les propriétés "Copier vers la sortie" des fichiers sur "Copier toujours" ou "Copier si récent" . Ceci copie tous les fichiers dans le répertoire de sortie, comme indiqué par Coder.

1
c_wiz_kid

Dans mon cas, je suivais les étapes décrites dans CefSharp - Notre code monde

Au lieu de suivre l’étape A et d’ajouter CefSharpAnyCpuSupport dans csproj et probing dans App.config, définissez simplement Platform Target sur x86 à l’étape B.

0
ZerosAndOnes

La méthode recommandée semble être d'utiliser le paquet NuGet. Même dans ce cas, vous devez apporter des modifications non intuitives, mais elles sont documentées. Lors de l'installation du package, un fichier readme.txt s'ouvre avec les problèmes les plus courants.

Dans mon cas, il me manquait (x64 également disponible)

<probing privatePath="x86" />

Mon App.config ressemble à ceci (avec CommonServiceLocator dedans, ignorez cette partie si vous ne l'avez pas)

<?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>

L'erreur se produit car il n'y a vraiment pas de fichier Cefsharp DLL dans le dossier bin lorsque vous définissez le projet sur AnyCPU. Mais dans les dossiers ci-dessous x86 et x64 où vous testez lors de l'ajout de cette ligne, le DLL existe. Un correctif temporaire consisterait à copier le contenu de/bin/x86 dans/bin.

Si AnyCpu est souhaité, CefSharpAnyCpuSupport doit être ajouté au fichier csproj. L’indicateur de projet pour Prefer 32bit doit être défini.

0
CodingYourLife