Microsoft Edge WebView2 - 加载时示例崩溃

Posted

技术标签:

【中文标题】Microsoft Edge WebView2 - 加载时示例崩溃【英文标题】:Microsoft Edge WebView2 - Sample crashes on Load 【发布时间】:2020-09-05 05:03:37 【问题描述】:

我采用了最新版本的 Microsoft.Web.WebView2(0.9.515-prerelease)并添加到测试 C# WinForms 应用程序中。我使用的是 VS 2019,.NET 框架是 4.7.2。 将 WebView2 控件放在窗体上,编译并运行。应用程序在加载时崩溃,在 Form1.designer.cs 中的以下位置。

    // webView21
    // 
    this.webView21.Location = new System.Drawing.Point(153, 66);
    this.webView21.Name = "webView21";
    this.webView21.Size = new System.Drawing.Size(492, 253);
    this.webView21.Source = new System.Uri("about:blank", System.UriKind.Absolute);
    this.webView21.TabIndex = 0;
    this.webView21.Text = "webView21";
    this.webView21.ZoomFactor = 1D;
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(800, 450);
    this.Controls.Add(this.webView21); //CRASHED HERE WITH BELOW EXCEPTION -

当我在发布模式下运行它时,得到以下异常跟踪 - System.NullReferenceException:对象引用未设置为对象的实例。

   at Microsoft.Web.WebView2.WinForms.WebView2.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.Control.OnParentVisibleChanged(EventArgs e)
   at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.Form.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

如果我使用最新的稳定版 WebView2 (v 0.9.488),它会引发编译错误,因为它不反映 Microsoft.Web

请告诉我如何解决此错误。非常感谢您的帮助。 8 个月前遇到了这个问题,但我希望微软现在已经超越了这个问题。 How can I use the Microsoft Edge WebView2 control in C# windows application

Microsoft 创建的示例解决方案也有适用于 WinForms 的 C# 版本。 https://github.com/MicrosoftEdge/WebView2Samples

也尝试了 Microsoft 提供的这个示例。它也崩溃了。 https://docs.microsoft.com/en-us/microsoft-edge/webview2/gettingstarted/winforms

【问题讨论】:

您是否为 WebView2 安装了正确版本的 Microsoft Edge?例如 WebView2 0.9.515-prerelease 至少需要安装 Microsoft Edge 84.0.515.0? docs.microsoft.com/en-us/microsoft-edge/webview2/releasenotes 示例应用程序显示“确保在地址栏中输入完整的 URL。如果 URL 不以 http:// 或 https:// 开头,则会引发 ArgumentException”,并且您的应用程序是试图加载“关于:空白”。也许这就是问题所在? 它甚至没有到达加载事件。例外是在设计器代码本身,而设计器代码将控件添加到窗体。 不确定我是否遗漏了一些非常基本的东西 - 我检查了笔记本电脑中 MS Edge 的版本,它说“Microsoft Edge 是最新的。版本 81.0.416.77(官方版本)(64-少量)”。但是为什么 84.0.* 在该网络链接中声明为最低版本? 【参考方案1】:

从我的Edge的路径,“C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe”,我们可以断定当前Edge是32位程序?请尝试将平台目标设置为 x86。一些大师说,设置 x86,它会工作!

从 MS 示例项目 WebView2WindowsFormsBrowser.csproj 中,Microsoft.Web.WebView2 版本应为“0.9.515-prerelease”。

【讨论】:

【参考方案2】:

您需要确保 1) Edge 版本是正确的。尝试从 Url https://c2rsetup.officeapps.live.com/c2r/downloadEdge.aspx?ProductreleaseID=Edge&platform=Default&version=Edge&source=EdgeInsiderPage&Channel=Canary&language=en 下载 Canary 版 Edge

和 2) 将 x86 设置为目标平台将解决问题。

【讨论】:

Edge 版本是版本 81.0.416.77(官方构建)(64 位)。我现在尝试将 x86 版本设置为目标,但仍然得到相同的异常。 @Krishnan V S,你需要 Edge Canary 才能让它工作。 哦是吗?谢谢,会试试的。 我遇到了同样的问题,即使我的 PC 有稳定的边缘,我仍然必须在它旁边安装金丝雀版本。在我这样做之后,一切正常。 您的解决方案对我有帮助,我遇到了同样的问题。【参考方案3】:

我遇到了同样的问题,但我能够解决它。只要 traget CPU 为“任何 CPU”,它就会崩溃,但如果将其更改为“x86”或“x64”,在我的情况下它会成功运行。似乎它无法检查和使用未指定的目标 CPU 架构。

我希望这可以省去很多人的麻烦

【讨论】:

【参考方案4】:

正如其他人所说,使用 WebView2 0.9.515-prerelease 时,最低 Microsoft Edge 版本为 84.0.515.0。您可以从 Microsoft Edge Insider Channel 下载所需的 Microsoft Edge 版本。请参阅下面的链接。

以下是使用 WebView2 时的一些有用链接:

Microsoft Edge 内部频道:https://www.microsoftedgeinsider.com/en-us/download WebView2 发行说明:https://docs.microsoft.com/en-us/microsoft-edge/webview2/releasenotes WebView2 错误报告/反馈(点击“问题”):https://github.com/MicrosoftEdge/WebViewFeedback

【讨论】:

【参考方案5】:

很遗憾,这仍然是 0.9.515 预发布版本中的一个问题。有一个针对此的错误打开,我添加了有关我的复制的更多详细信息:

https://github.com/MicrosoftEdge/WebViewFeedback/issues/228#issuecomment-687873636

编辑:如果您为 x64 位安装 Edge,则 x86 建议不适用于您。您可以为 x64 构建它,它会工作。更多细节在我的问题回复中:https://github.com/MicrosoftEdge/WebViewFeedback/issues/228#issuecomment-687900181

【讨论】:

【参考方案6】:

如果 WebView2 组件无权创建存储用户设置等所需的数据文件夹,则可能会在加载过程中产生异常并使应用程序崩溃。

如果应用程序在从 Visual Studio 或从其他不受限制的位置启动时正确加载,但在安装到 Program Files 时无法加载,那么这可能是一个问题。

默认情况下,数据文件夹创建在与应用程序 exe 相同的文件夹中,这在 Program Files 中可能会失败。需要将数据文件夹设置到其他位置。

此链接提供了有关使用数据文件夹的一些信息: Managing the User Data Folder

此问题提供了一些代码,用于将 WebView2 的数据文件夹设置为有效位置: WebView2 C# Winforms application doesn't work when installed in Program Files folder #297

【讨论】:

【参考方案7】:

按照设定的平台指导...

如果您使用的是 Canary Microsoft.Web.WebView2.0.9.628-prerelease。有一个已知问题,目前的解决方案是降级到 Microsoft.Web.WebView2.0.9.579-prerelease。

https://github.com/MicrosoftEdge/WebView2Feedback/issues/431

这对我有用。

【讨论】:

以上是关于Microsoft Edge WebView2 - 加载时示例崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Edge 浏览器开发控件WebView2 尝鲜

Microsoft Edge WebView2 控件可以在显示之前预加载页面吗?

使用 Caliburn Micro 将 WebView2 绑定到 ViewModel

WinUI 3.0 - 为啥 UWP 项目要求 MS Edge for Business 用于 WebView2

WinForms Microsoft.Web.WebView2 导航,页面已完全加载

是否有对 Webview2 控件的 ActiveX 支持