引发 Windows WebView2 访问本地文件异常

问题描述

我正在测试 WebView2 控件并希望访问本地文件而不是呈现远程网站。我正在使用 SetVirtualHostNametoFolderMapping 方法,但得到一个异常,指出接口不受支持可能是因为旧版本的控件或旧版本的运行时。我正在使用两者的最新版本(运行时为 88.0.705.81,WebView 控件为 1.0.790),所以不知道为什么会出现异常。任何帮助/想法?

这是我得到异常的代码行:

webView.CoreWebView2.SetVirtualHostNametoFolderMapping("web.example","web",CoreWebView2HostResourceAccessKind.Allow);

这是我得到的例外:

Microsoft.Web.WebView2.Core.dll 中发生类型为“System.NotImplementedException”的未处理异常 无法投射到 Microsoft.Web.WebView2.Core.Raw.ICoreWebView2_3。 如果您使用的接口不受您正在使用的 WebView2 运行时版本支持,则可能会发生这种情况。 例如,如果您使用的是旧 SDK 中的实验性接口,该接口已在较新的运行时中修改删除。 或者,如果您使用的是较新 SDK 中未在较旧运行时中实现的公共接口。

解决方法

SetVirtualHostNameToFolderMapping 需要 WebView2 运行时版本 721 或更新版本。该功能仍在预发布 SDK 包中,并且需要最新的 Canary 频道 Edge 浏览器作为您的 WebView2 运行时。

查找版本

您可以在页面底部的 SetVirtualHostNameToFolderMapping docs 中看到它适用于 SDK 版本 1.0.721 和 1.0.790。正如 version doc 所述,与 SDK 版本对应的 WebView2 运行时版本具有匹配的内部版本号。所以这个新功能至少需要 WebView2 Runtime 89.0.721.0 或更高版本。

预发布与发布包

您使用的是与 Edge 浏览器稳定通道匹配的最新版本的 WebView2 运行时,并且 SetVirtualHostNameToFolderMapping 的代码尚未进入稳定通道。这就是为什么它仍然只在我们的预发布 SDK 包中而不是发布 SDK 包中的原因。要立即试用,您需要use the Edge browser canary channel as your WebView2 Runtime