在WPF中使用本地Webview2,不依赖系统runtime
项目运行环境:
- .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
下载下来的文件为Cab格式的文件,此文件为压缩文件
将其解压,可得到如下的目录
\MICROSOFT.WEBVIEW2.FIXEDVERSIONRUNTIME.120.0.2210.91.X64
├─EBWebView
│ ├─x64
│ └─x86
├─edge_feedback
├─Extensions
├─Locales
├─MEIPreload
├─Notifications
├─PdfPreview
├─Trust Protection Lists
│ ├─Mu
│ └─Sigma
└─WidevineCdm
└─_platform_specific
└─win_x64
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.baidu.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 的系统中,是可以运行的,如果报错,请参考第四点进行检查项目
标签:OnContentRendered,文件,项目,Webview2,WebView2,Source,WPF,runtime From: https://www.cnblogs.com/ganbei/p/18026779