私はCefSharpを使用してWebアプリをwinfomsにロードしようとしています。 2つのdllファイルを追加しました:CefSharp.dllとCefSharp.WinFormsを参照に追加し、2つのdllファイルicudt.dllとlibcef.dllを既存のアイテムを追加してプロジェクトに追加しました。
これはフォームのコードです
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)
このことを知っている人は助けてください、ありがとう
これらのファイルを配置する必要があります
libcef.dll
icudtl.dat
CefSharp.dll
CefSharp.WinForms.dll
あなたのbin\Debug(または構成に基づいてbin\Releaseに)
インストールすることを忘れないでくださいVisual C++ 2012再配布(Visual C++ 201バージョン43以降で再配布可能)、Visual Studioが常に例外を表示しないCefSharp.dllを既に持っていますが!
この助けを願っています。
これは、出力ディレクトリ(Visual Studioで実行している構成に応じて、bin\Debugまたはbin\Release)にすべてのファイルが存在しないために発生する一般的なエラーです。 CefSharp.dll
は.NETベースのDLLです。これは他の.dllファイルに依存し、さらに他の.dllおよび他のファイルにさらに依存します...
最低限必要なファイルのリストは次のとおりです。
私もこれに問題があり、次のことをしました:
すべての依存関係が確実に存在するように、起動時に次のコードを追加しました
_ 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()
を呼び出すとすぐに例外が発生しました。
ILSpyを使用してすべてのms.net CEF dllをチェックしたところ、これらのDLLの一部もGACにあることがわかりました。 GACからそれらを削除するとすぐに、すべて正常に機能しました。
これは一般的な問題であるため、 [〜#〜] 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
を使用してソリューションに追加することはお勧めしません。それは私にとってはつらい感じです。
ファイルの「出力にコピー」プロパティを「常にコピー」または「新しい場合にコピー」に設定する必要があります。これにより、Coderの指定に従って、すべてのファイルが出力ディレクトリにコピーされます。
私の場合、 CefSharp-Our Code World に概説されている手順に従っていました。
ステップAに続いてCefSharpAnyCpuSupport
にcsproj
とApp.config
にprobing
を追加する代わりに、ステップでPlatform Target
をx86
に設定するだけです。 Bはトリックをしました。
推奨される方法は、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のプロジェクトフラグを設定する必要があります。