C# ClickOnce安装程序中如何引用WebView2固定运行时二进制文件
问题解决方法
- 你给出的固定相对路径写法完全不可用,原因有二:
- 该路径是你本地开发环境的编译输出路径,ClickOnce安装到用户设备时会生成随机的私有安装目录,路径完全不固定,硬编码路径100%会找不到文件
CoreWebView2Environment.CreateAsync的browserExecutableFolder参数要求传入的是包含msedgewebview2.exe的文件夹路径,不是你写的EmbeddedBrowserWebView.dll的文件路径,参数类型本身就不匹配
- 正确实现逻辑:
首先在打包阶段,将固定版本的WebView2运行时整个EBWebView文件夹的所有文件属性设置为「如果较新则复制/始终复制到输出目录」,在ClickOnce发布配置的「应用程序文件」列表中,确认EBWebView下的所有文件发布状态为「包含」、下载组为「必需」,确保发布时运行时文件会和你的主程序放在同一个根目录下。
然后在代码中动态获取当前程序的运行目录,拼接对应架构的WebView2运行时路径即可,示例代码如下:
// 获取当前程序运行的根目录 var basePath = AppContext.BaseDirectory; // 根据当前进程架构拼接运行时路径,如果你只打x64包可以直接写死x64 var arch = Environment.Is64BitProcess ? "x64" : "x86"; var browserPath = Path.Combine(basePath, @"EBWebView", arch); // 创建运行时环境 var env = await CoreWebView2Environment.CreateAsync(browserExecutableFolder: browserPath); // 给WebView2控件指定环境 await webView21.EnsureCoreWebView2Async(env);
- 额外注意事项:
如果你的程序是.NET 5+的Windows桌面应用,也可以直接安装官方对应架构的固定版本WebView2运行时NuGet包,包会自动处理运行时文件的复制和路径引用逻辑,不需要手动拷贝运行时文件。
内容的提问来源于stack exchange,提问作者Janifer Cheng
相关产品推荐
相关产品推荐

