C# Webform项目使用WebView2固定版本运行时找不到兼容运行时如何解决
WebView2固定版本Runtime部署问题修复方案
1. 路径配置错误
- browserExecutableFolder指向错误:你当前配置的路径只到
browserPackageV1.exe.WebView2目录,实际需要指向包含msedgewebview2.exe的Runtime子目录,需要补全最后的Microsoft.WebView2.FixedVersionRuntime.94.0.992.50.x86段。 - 路径语法错误:你使用了@前缀的逐字字符串,不需要额外转义斜杠,双斜杠会导致路径识别失败。
- 推荐基于程序集位置构造动态路径,避免写死路径导致部署后失效:
// 获取当前程序集运行目录 var appDir = Path.GetDirectoryName(typeof(Form1).Assembly.Location); // 拼接Runtime路径,指向包含msedgewebview2.exe的目录 String locOfRuntime = Path.Combine(appDir, @"browserPackageV1.exe.WebView2\Microsoft.WebView2.FixedVersionRuntime.94.0.992.50.x86"); // 拼接用户数据目录 String locOfSavedState = Path.Combine(appDir, "temp");
2. 执行顺序错误
你在构造函数中先给webBrowser.Source赋值,再执行初始化逻辑,此时WebView2还未加载自定义固定版本环境,会默认查找系统安装的Runtime,找不到就抛出异常。必须先完成环境初始化,再设置Source属性。
3. EnsureCoreWebView2Async写法错误
方法参数不需要写参数定义语法CoreWebView2EnvironmentOptions options = null,直接传对应参数即可,且需要先拿到创建好的环境实例再传入方法。
完整可运行的修复后代码
public Form1() { InitializeComponent(); // 先初始化WebView,完成后再设置跳转地址 InitWebView(); } async void InitWebView() { var appDir = Path.GetDirectoryName(typeof(Form1).Assembly.Location); var locOfRuntime = Path.Combine(appDir, @"browserPackageV1.exe.WebView2\Microsoft.WebView2.FixedVersionRuntime.94.0.992.50.x86"); var locOfSavedState = Path.Combine(appDir, "temp"); // 先创建自定义环境 var env = await CoreWebView2Environment.CreateAsync( browserExecutableFolder: locOfRuntime, userDataFolder: locOfSavedState, options: null); // 用自定义环境初始化WebView2控件 await webBrowser.EnsureCoreWebView2Async(env); // 初始化完成后再设置访问地址 webBrowser.Source = new Uri("https://www.microsoft.com/en-us/"); }
额外注意事项
- 要确保你的Runtime包架构和项目生成架构一致,如果项目生成的是x64程序,就不能用x86的固定版本Runtime
- 运行前确认locOfRuntime指向的目录下确实存在
msedgewebview2.exe文件
内容的提问来源于stack exchange,提问作者Janifer Cheng
相关产品推荐
相关产品推荐

