WebView2の固定バージョン配布モードの話

# はじめに
　11/20にMicrosoftが.NET向けのWebView2を[正式公開](https://blogs.windows.com/msedgedev/2020/11/20/announcing-general-availability-of-microsoft-edge-webview2-for-net-and-fixed-version-distribution-mode/)しました。これによりWPFやWinformといったアプリで、Chromiumを採用した新しいMicrosoft Edgeベースのブラウザーコントロールを利用できることになりました。
　下記のマイクロソフトのドキュメントの中では、ブラウザーコントロールがバックエンドで使うWebViewランタイムの2つの配布方法について解説されています。この記事では2つの配布パターンの内、`固定バージョンの配布モード`でアプリのパッケージを作成して動作を確認します。

- [WebView2 を使用したアプリの配布](https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/concepts/distribution)

# WebViewランタイムの配布モード
　WebView2はバックエンドにEdgeと同じWebブラウザーのランタイムを利用するのですが、すべての環境にEdgeがインストールされているとは限らない＆様々なバージョンがインストールされている可能性があります。WebView2コントロールでは再配布可能なWebViewランタイムをアプリのパッケージに含めて、そのランタイムを利用することで安定して利用するために下記の2パターンの配布方法が用意されています。

- エバーグリーン配布モード
- 固定バージョンの配布モード

　エバーグリーン配布モードは、あらかじめWebViewランタイムがインストールされている、もしくはアプリ起動時にWebViewランタイムをインストールできる環境向けの配布モードです。実行環境にインストールされた最新のWebViewランタイムを使用するため、

- アプリのパッケージサイズを節約できる
- PlayReadyの対象になるので起動時間を短縮できる

といったメリットがあります。

　今後はWindowsのリリースに含まれる予定のようですが、現時点ではWebViewランタイムは自動的に配信されていないので、エバーグリーン配布モードを利用する場合は下記手順に従ってWebViewランタイムをインストールする必要があります。

- [Evergreen 配布モード](https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/concepts/distribution#details-about-the-evergreen-runtime-distribution-mode)

# 固定バージョンの配布モード
　固定バージョンの配布モードは、WebView2の配置時にWebViewランタイムのパスを指定してWebView2を初期化する方法です。エバーグリーン配布モードが実行環境に1つだけ存在する共有のWebViewランタイムを利用するのに対し、WebView2初期化時に指定した特定バージョンのWebViewランタイムを利用できるため

- 開発環境と実行環境のブレが少なくなる
- WebViewランタイムを個別にインストールする必要がなくなる
- WebViewランタイムの配置時に管理者への昇格が不要

といったメリットがありますが、

- アプリのパッケージサイズが肥大化する
- WebViewランタイムの脆弱性が放置される可能性がある
- デフォルトではPlayReadyの対象にならない

　といったデメリットがあり、ランタイムの管理コストがエバーグリーン配布モードよりも高くなります。ただ、厳密に指定されたバージョンのWebViewランタイムを利用できることは大きなメリットなので、個人的にはとても魅力的に見えます。

# 固定のパスに展開したWebViewランタイムを参照するようにアプリを構成してみる。

　[ここ](https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/concepts/distribution#%E5%9B%BA%E5%AE%9A%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E9%85%8D%E5%B8%83%E3%83%A2%E3%83%BC%E3%83%89)の手順に従い、[Microsoft Edge WebView2](https://developer.microsoft.com/ja-jp/microsoft-edge/webview2/)のダウンロードページから実行環境ごとのWebViewランタイムをダウンロードしてCabファイルを`C:¥temp`などに展開します。参照元のドキュメントにもありますが、フォルダー構造が重要なのでエクスプローラーの機能で展開すると動作しないので注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/c5111106-a842-46ed-a23f-150a9246fdf8.png)
　まずは単純にダウンロードしたランタイムを参照してプログラムが起動するかを確認していきましょう。
　[WPFでのWebView2の概要](https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/gettingstarted/wpf)に従いWPFプロジェクトを作成し、Nugetから`Microsoft.Web.WebView2`パッケージをプロジェクトにインストールします。


`App.xaml`および`MainWindow.xaml`にWebView2用のネームスペースを追加し、

``` xml:App.xamlおよびMainWindow.xaml
        xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
```

`App.xaml`にWebViewランタイムのパスを設定するプロパティーをリソースに追加します。

``` xml:App.xaml 
<Application x:Class="BuildeeApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <wv2:CoreWebView2CreationProperties 
            x:Key="FixedWebView2CreationProperties" 
            BrowserExecutableFolder="C:\Temp\Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\" />
    </Application.Resources>
</Application>
```

次にWebView2コントロールをページに追加し、上で作ったリソースを参照します。

``` xml:MainWindow.xaml 
        <wv2:WebView2 CreationProperties="{StaticResource FixedWebView2CreationProperties}"
                      Source="https://karuakun.wordpress.com" />
```

`xml:MainWindow.xaml`はこのようになります。

``` xml:MainWindow.xaml 
<Window x:Class="SampleApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SampleApp"
        xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <wv2:CoreWebView2CreationProperties 
            x:Key="FixedWebView2CreationProperties" 
            BrowserExecutableFolder="C:\Temp\Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\" />
    </Window.Resources>

    <Grid>
        <wv2:WebView2 CreationProperties="{StaticResource FixedWebView2CreationProperties}"
                      Source="https://karuakun.wordpress.com" />
    </Grid>
</Window>
```
実行すると、WebView2コントール内にSourceに指定したURLのページが表示されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/d9a6367f-c941-b23f-e83d-7607a28ce875.png)

# アプリにWebViewランタイムをパッケージングする
　このままでは、個別に`C:¥temp`にWebViewランタイムをダウンロードして展開しないと動かないので、アプリのパッケージにWebViewランタイムを含めていきます。とりあえず展開したWebViewランタイムをプロジェクトにドロップしてこんな状態にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/2d9b1bd5-b9ad-87b2-b1f9-951a20bd262e.png)
　このフォルダー配下の全ファイル（フォルダーの中も）の出力ディレクトリにコピープロパティーを新しい場合はコピーするにします(GUIで操作するのがめんどくさい場合は、文末の「おまけ 出力ディレクトリにコピーの設定」の設定をプロジェクトファイルに追加してあげればたぶんOKです)。これでビルド時にWebViewランタイムがパッケージに含まれるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/daa25d0d-3bfc-788f-fbda-df4ee0214637.png)
App.xaml.csなどでアプリケーションリソースの属性値をビルド時に配置したディレクトリにしてあげれば設定は完了です。

``` cs:App.xaml.cs
namespace SampleApp
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            var executeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var runtimePath = Path.Combine(executeDirectory, "Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64");
            var fixedWebView2CreationProperties = (CoreWebView2CreationProperties)Current.Resources["FixedWebView2CreationProperties"];
            fixedWebView2CreationProperties.BrowserExecutableFolder = runtimePath;
            
        }
    }
```

プロジェクトディレクトリで、次のコマンドを実行し単一実行形式のパッケージを作成します。

```
dotnet publish -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
```

じっ、実行ファイルのサイズが458MBになりましたね（汗。まぁ、WebViewランタイムを展開した時点で297MBとかありますからしょうがない、、、ですよね。サイズが気になるならエバーグリーン配布モードを使いましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/81083cbb-174f-3ab1-c1b3-9356c1c25f06.png)
7zで圧縮したら140MBまで小さくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/708c3e2e-aa57-44d1-5966-d3a033a46132.png)

# まとめ

これまでWebBrowserコントロールがIEベースだったために起きていた問題が少なくなると良いですね。
WebViewランタイムのパッケージ方法はなんとなく別の方法がある気がします。
ご存じの方がいらっしゃったら教えてください。

# おまけ 出力ディレクトリにコピーの設定
``` xml:SampleApp.csproj
  <ItemGroup>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\87.0.664.47.manifest">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\concrt140.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\d3dcompiler_47.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\dual_engine_adapter_x64.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\EBWebView\x64\EmbeddedBrowserWebView.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\EBWebView\x86\EmbeddedBrowserWebView.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\eventlog_provider.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Extensions\external_extensions.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\icudtl.dat">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\learning_tools.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\libEGL.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\libGLESv2.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\libsmartscreen.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\af.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\am.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ar.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\as.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\az.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\be.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\bg.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\bn-IN.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\bn.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\bs.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ca-Es-VALENCIA.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ca.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\chr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\cs.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\cy.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\da.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\de.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\de.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\es.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\fr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\it.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\ja.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\ko.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\pt-BR.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\ru.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\zh-CN.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\devtools\zh-TW.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\el.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\en-GB.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\en-US.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\es-419.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\es.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\et.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\eu.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\fa.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\fi.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\fil.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\fr-CA.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\fr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ga.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\gd.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\gl.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\gu.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\he.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\hi.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\hr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\hu.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\hy.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\id.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\is.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\it.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ja.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ka.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\kk.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\km.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\kn.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ko.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\kok.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ky.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\lb.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\lo.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\lt.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\lv.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\mi.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\mk.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ml.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\mn.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\mr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ms.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\mt.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\nb.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ne.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\nl.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\nn.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\or.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\pa.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\pl.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\prs.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\pt-BR.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\pt-PT.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\qu.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ro.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ru.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sd.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\si.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sk.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sl.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sq.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sr-Cyrl-BA.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sr-Latn-RS.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sv.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\sw.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ta.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\te.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\th.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\tk.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\tr.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\tt.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ug.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\uk.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\ur.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\uz-Latn.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\vi.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\zh-CN.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Locales\zh-TW.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MEIPreload\manifest.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MEIPreload\preloaded_data.pb">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\microsoft_apis.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\microsoft_shell_integration.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\mip_core.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\mip_protection_sdk.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MLModels\autofill_labeling.onnx">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MLModels\autofill_labeling_email.onnx">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MLModels\autofill_labeling_features.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MLModels\autofill_labeling_features_email.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\MLModels\nexturl.onnx">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\mojo_core.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedge.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedge.dll.sig">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedgewebview2.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedgewebview2.exe.sig">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedge_100_percent.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedge_200_percent.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msedge_elf.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\msvcp140.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\nacl_irt_x86_64.nexe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Notifications\SoftLandingAssetDark.gif">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Notifications\SoftLandingAssetLight.gif">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\notification_helper.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\oneauth.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\oneds.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\onnxruntime.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\onramp.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\PlayReadyCdm\_platform_specific\win_x64\playreadycdm.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\resources.pak">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\show_third_party_software_licenses.bat">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\swiftshader\libEGL.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\swiftshader\libGLESv2.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\telclient.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Advertising">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Analytics">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\CompatExceptions">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Content">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Cryptomining">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Entities">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Fingerprinting">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\LICENSE">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\manifest.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Other">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\Trust Protection Lists\Social">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\v8_context_snapshot.bin">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\vccorlib140.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\vcruntime140.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\vcruntime140_1.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\wdag.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\WidevineCdm\manifest.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\WidevineCdm\_platform_specific\win_x64\widevinecdm.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\WidevineCdm\_platform_specific\win_x64\widevinecdm.dll.sig">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Microsoft.WebView2.FixedVersionRuntime.87.0.664.47.x64\wns_push_client.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
```