Ne pouvait pas charger le fichier ou l'assemblage 'CefSharp.dll' ou 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.Win se transforme en références et ajoute 2 fichiers dll icudt.dll et libcef.dll dans mon projet à travers ajouter des articles existants.
et voici 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());
}
Lorsque vous exécutez 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 supplémentaires: ne pouvait pas charger le fichier ou l'assemblage 'CefSharp.dll' ou une de ses dépendances. Une bibliothèque de liens dynamiques (DLL) routine d'initialisation a échoué. (Exception de HRESULT: 0x8007045A)
donc, quiconque est au courant de cela s'il vous plaît aidez-moi, merci
8 réponses
Vous devez mettre ces fichiers
libcef.dll
icudtl.dat
CefSharp.dll
CefSharp.WinForms.dll
dans votre bin\Debug (ou bin\Release base de 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 Visual Studio affichera toujours une exception dire non trouvé CefSharp.dll bien que vous l'avez déjà!
Espérons que cette aide.
C'est un problème courant et il est donc mentionné dans le 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 faire cela est d'utiliser un Post-Build
action, qui peut se définir sous les paramètres du projet dans Visual Studio.
Vous pouvez également configurer le post-build dans le .csproj
fichier, 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 est tiré de la CefSharp.Wpf.Exemple projet dans le CefSharp code source, CefSharp3 branche. L'emplacement exact des fichiers peut varier dans votre cas, surtout si vous utilisez CefSharp1, alors adaptez-le au besoin pour vous assurer que les fichiers sont copiés correctement.)
Je ne recommande pas de mettre des trucs dans bin\Debug ou bin\Release et de les ajouter à la solution en utilisant Copy Always
. Il se sent comme une bidouille pour moi.
j'ai juste eu des problèmes avec ce même et j'ai fait le code suivant:
- vérifiez que tous les fichiers se trouvent dans le répertoire racine des applications (https://github.com/cefsharp/CefSharp/wiki/Output-files-description-table-%28Redistribution%29 et https://bitbucket.org/chromiumembedded/cef/src/aefb5ccce879f308f0bcc3ac719c86defe2f9715/tools/distrib/win/README.redistrib.txt?at=master&fileviewer=file-view-default)
- s'est assuré que la Redist C++ installé (en fait, j'ai 2010, 2013, 2015, tous les x86 et x64 installé)
a ajouté le code suivant au démarrage pour s'assurer que toutes les dépendances sont là
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
n'a rien signalé de manquant mais dès que j'ai appelé new CefSharp.Wpf.ChromiumWebBrowser()
l'exception s'est produite.
j'ai vérifié tous les ms.net CEF dll à l'aide de ILSpy et a constaté que certains de ces Dll, ont été localisées dans le GAC. Dès que je les ai retirés de GAC tout a bien fonctionné!
il s'agit d'une erreur courante causée par le fait que tous les fichiers ne sont pas présents dans le répertoire de sortie (bin\Debug ou bin\Release, selon la configuration que vous utilisez dans Visual Studio). CefSharp.dll
est une DLL basée sur .NET qui dépend d'autres .fichiers dll, qui à son tour dépend plus loin d'autres .dll et autres fichiers...
Voici une liste des fichiers minimum requis:
- libcef.dll (le noyau de Chrome DLL, qui contient essentiellement le web navigateur + l'interface d'embeddability de CEF dont nous dépendons)
- icudt.dll (Unicode DLL pour le Chrome, doit aussi être présent)
- CefSharp.dll (managed .net assembly qui contient le noyau CefSharp la fonctionnalité)
- CefSharp.WinForms.dll OR CefSharp.WPF.dll (selon votre projet type)
Vous devez définir le "copier la sortie de' propriétés des fichiers de "copy" ou "copier si plus récent'. Cette copie tous les fichiers dans le répertoire de sortie, comme indiqué par le Codeur.
paramétrage " msvcp120.dll" et " msvcr120.dll " à "copier toujours" m'a aidé.
dans mon cas, je suivais les étapes décrites dans CefSharp - Notre Code Monde.
au lieu de suivre l'étape A et ajouter CefSharpAnyCpuSupport
csproj
et probing
App.config
, il suffit de réglage de l' Platform Target
x86
à l'étape B fait le tour.
La méthode recommandée semble être d'utiliser le package NuGet. Même dans ce cas, vous devez faire des changements non intuitifs, mais ils sont documentés. Lors de l'installation du paquet fraîchement readme.ouverture du fichier txt avec les problèmes les plus courants.
Dans mon cas, j'ai été absent (x64 également disponible)
<probing privatePath="x86" />
Mon Application.config ressemble à ceci (avec CommonServiceLocator, ignorer 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 parce qu'il y est vraiment pas DLL Cefsharp dans le dossier bin lorsque vous définissez le projet à AnyCPU. Mais dans le dossier x86 et x64 ci-dessous où vous sondez en ajoutant cette ligne, la DLL existe. Une solution temporaire serait de copier le contenu de /bin/x86 /bin.
si AnyCpu est désiré CefSharpAnyCpuSupport doit être ajouté au fichier csproj. Le drapeau de projet pour Prefer 32bit doit être mis.