web-dev-qa-db-ja.com

ファイルまたはアセンブリ「CefSharp.dll」またはその依存関係の1つをロードできませんでした

私はCefSharpを使用してWebアプリを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'またはその依存関係の1つを読み込めませんでした。ダイナミックリンクライブラリ(DLL)初期化ルーチンが失敗しました。 (HRESULTからの例外:0x8007045A)

このことを知っている人は助けてください、ありがとう

19
Kien Dang Ngoc

これらのファイルを配置する必要があります

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

あなたのbin\Debug(または構成に基づいてbin\Releaseに)

インストールすることを忘れないでくださいVisual C++ 2012再配布(Visual C++ 201バージョン43以降で再配布可能)、Visual Studioが常に例外を表示しないCefSharp.dllを既に持っていますが!

この助けを願っています。

23
Toan Nguyen

これは、出力ディレクトリ(Visual Studioで実行している構成に応じて、bin\Debugまたはbin\Release)にすべてのファイルが存在しないために発生する一般的なエラーです。 CefSharp.dllは.NETベースのDLLです。これは他の.dllファイルに依存し、さらに他の.dllおよび他のファイルにさらに依存します...

最低限必要なファイルのリストは次のとおりです。

  • libcef.dll(基本的にWebブラウザー+依存するCEF埋め込みインターフェースを含むコアChromium DLL)
  • icudt.dll(Unicode DLLも存在する必要があります)
  • CefSharp.dll(コアCefSharp機能を含むマネージ.NETアセンブリ)
  • CefSharp.WinForms.dllORCefSharp.WPF.dll(プロジェクトのタイプに応じて)

詳細については、このリンクを確認してください

6
Kurubaran

私もこれに問題があり、次のことをしました:

_CefSharp.DependencyChecker_は欠落しているものを報告しませんでしたが、新しいCefSharp.Wpf.ChromiumWebBrowser()を呼び出すとすぐに例外が発生しました。

ILSpyを使用してすべてのms.net CEF dllをチェックしたところ、これらのDLLの一部もGACにあることがわかりました。 GACからそれらを削除するとすぐに、すべて正常に機能しました。

6
uTILLIty

これは一般的な問題であるため、 [〜#〜] faq [〜#〜] 、質問番号3で言及されています。

@AcccessDeniedは正しい。ファイルは出力フォルダー(bin\Debugまたはbin\Release)に存在する必要があります。これを行う1つの方法は、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ソースコード、CefSharp3ブランチの CefSharp.Wpf.Example プロジェクトから取られています。特にCefSharp1を使用している場合は、正確なファイルの場所が異なる場合があります。ファイルが正しくコピーされることを確認してください。)

Bin\Debugまたはbin\Releaseにデータを入れて、Copy Alwaysを使用してソリューションに追加することはお勧めしません。それは私にとってはつらい感じです。

6
Per Lundberg

ファイルの「出力にコピー」プロパティを「常にコピー」または「新しい場合にコピー」に設定する必要があります。これにより、Coderの指定に従って、すべてのファイルが出力ディレクトリにコピーされます。

1
c_wiz_kid

私の場合、 CefSharp-Our Code World に概説されている手順に従っていました。

ステップAに続いてCefSharpAnyCpuSupportcsprojApp.configprobingを追加する代わりに、ステップでPlatform Targetx86に設定するだけです。 Bはトリックをしました。

0
ZerosAndOnes

推奨される方法は、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>

プロジェクトをAnyCPUに設定すると、binフォルダーにCefsharp DLLが実際にないため、エラーが発生します。ただし、この行を追加するときにプローブするx86およびx64フォルダーにはDLLが存在します。一時的な修正方法は、内容を/ bin/x86から​​/ binにコピーすることです。

AnyCpuが必要な場合、CefSharpAnyCpuSupportをcsprojファイルに追加する必要があります。 Prefer 32bitのプロジェクトフラグを設定する必要があります。

0
CodingYourLife