项目运行环境:
- .Net Framework 4.5.2
- Windows 7 x64 Service Pack 1
- WebView2 Microsoft.WebView2.FixedVersionRuntime.120.0.2210.91.x64
考虑到很多老项目,本项目使用的是
.Net Framework 4.5.2
,
.Net
更高版本的其实也是可以支持的。
1、下载 WebView2 固定版本 Runtime
WebView2 Runtime: https://developer.microsoft.com/zh-CN/microsoft-edge/webview2/#download
首先下载自己想要的固定版本的 WebView2 Runtime[1]
下载下来的文件为
Cab
格式的文件,此文件为压缩文件
将其解压,可得到如下的目录
2、创建项目,将
Webview2
复制到项目中
创建
.Net Framework 4.5.2 WPF
项目,将解压的
Webview2
复制到项目中,如下图所示:
文件夹
WebView2
中就是
cap
文件解压后的二进制文件以及文件夹
将
WebView2
文件夹中所有文件
属性
-
高级
-
复制到输入目录
设置为
如果较新则复制
属性
-
高级
-
生成操作
设置为
无
如下图所示:
3、在项目的 MainWindow 后台代码中写逻辑
在
MainWindow.cs
文件中添加代码
Public partial class MainWindow : Window
{
public string Url { get; set; } = "https://www.bing.com";
public MainWindow()
{
InitializeComponent();
}
protected override async void OnContentRendered(EventArgs e)
{
base.OnContentRendered(e);
await webView.EnsureCoreWebView2Async(
await CoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));
webView.Source = new Uri(Url);
}
}
添加后,即可在无
WebView2 Runtime
的系统中运行
4、一些问题
项目运行时,有些问题可能会出现,
- 报错
Microsoft.Web.WebView2.Core.WebView2RuntimeNotFoundException:“Couldn't find a compatible Webview2 Runtime installation to host WebViews.”
这个可能是因为wenview2的文件没有设置为较新则复制
导致的 - 报错
System.ArgumentException:“WebView2 was already initialized with a different CoreWebView2Environment. Check to see if the Source property was already set or EnsureCoreWebView2Async was previously called with different values.
这个可能是因为在执行OnContentRendered
方法前,,对CoreWebview2设置了source
属性,此时webview2
会自动初始化环境,后面不能重复初始化 去掉source
属性(设置属性或者在构造时去掉都可以)上面代码可以看到,Source
属性是在 最后才指定的
protected override async void OnContentRendered(EventArgs e)
{
base.OnContentRendered(e);
await webView.EnsureCoreWebView2Async(
await CoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));
webView.Source = new Uri(Url);//最后才指定的Source
}
5、运行
将生成的
Debug
直接拷贝到不存在
Webview2
的系统中,是可以运行的,如果报错,请参考第四点进行检查项目
版权归原作者 weijia3624 所有, 如有侵权,请联系我们删除。