WinformフォームにWebブラウザを埋め込むにはどうすればいいですか?


背景
プロジェクトの中でWinformフォームにウェブページを埋め込む必要があります.マイクロソフトはWebBrowserコントロールを持っていますが、彼女はIEモードで運行しています.互換性がとても悪いので、一周探したらCef Sharpというやつがいます.
Cef Sharpの主な特徴
  • サポート.NET Frame ebook 4.5.2+
  • Winform対応、WPF
  • Chromiumカーネルに基づく
  • は、Javascript相互操作をサポートする
  • .
  • BSDビジネスソース、アドレスhttps://github.com/cefsharp/CefSharp
  • クイック入門
    注:筆者の環境はVisual Studio 2019です.
  • ウインドウformプロジェクトを新規作成します.
  • は、Nugetパケットマネージャを開く.
  • CefSharp.Win Formsを検索します.現在の最新バージョンは81.xで、インストールをクリックしてください.
  • コンパイル項目には、以下のエラーが発生します.
    Cef Sharp.Comon is unable to proceed as your current Platform is‘AnyCPU’.To target AnyCPU please readhttps://github.com/cefsharp/CefSharp/issues/1714. Alternative ely change your Platform to x 86 or x 64 and the relevant files will be copied atootmatially.For details on change your project s Platform seehttps://docs.microsoft.com/en-gb/visualstudio/ide/how-to-configre-project-to-plotems?view=vs-2017
  • これはコンパイル時にデフォルトで使用するAnyCPUのオプションであり、公式にも異なる解決策が与えられています.
  • プロジェクトファイルをテキストツールで開き、最初のPropertyGroupノードを見つけ、サブノードを追加します.true
  • App.Configを修正し、probingノードを追加し、修正した後、以下の通りです.
    
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
        startup>
        <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="x86"/>
          assemblyBinding>
        runtime>
    configuration>
    
  • ProgramのMain関数は、以下のように修正されました.
        static void Main()
        {
            var settings = new CefSettings();
            settings.BrowserSubprocessPath =System.IO.Path.GetFullPath(@"x86\CefSharp.BrowserSubprocess.exe");
    
            Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
    
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    
  • 最後にFormの中にブラウザのコントロールを埋め込むだけでいいです.
  • public Form1()
    {
        InitializeComponent();
    
        ChromiumWebBrowser browser = new ChromiumWebBrowser("http://www.bigname65.com");
        browser.Dock = DockStyle.Fill;
        this.Controls.Add(browser);
    }