winforms 使用WebView2部署的C#应用程序找不到运行时

okxuctiv  于 2022-11-17  发布在  C#
关注(0)|答案(3)|浏览(404)

我创建了一个基于.NET 4.6.1的C# DLL,它有一个包含Microsoft.Web.WebView2.WinForms.WebView2类型元素的表单。它使用最新(截至6月21日)的SDK发行版本,由NuGet自动提取:

<ItemGroup>
     <PackageReference Include="Microsoft.Web.WebView2">
       <Version>1.0.864.35</Version>
     </PackageReference>
   </ItemGroup>

当从Visual Studio 17运行以及直接单击Release或Debug文件夹中的可执行文件时,这就像一个魔咒。
我的终端用户既没有SDK,也无法使用NuGet来获取它,所以我通过WiX安装程序自定义操作来安装WebView 2运行时。该操作运行MicrosoftEdgeWebview2Setup.exe引导安装程序来安装运行时。之后,我确实在Windows应用程序和功能面板中看到了Microsoft Edge WebView 2 Runtime版本91.0.864.59。因此安装程序可以正常工作。
这样,安装的应用程序就不能再运行WebView 2组件了。它完全忽略了运行时,当代码调用包含WebView 2的表单时,我看到了以下异常:

Could not load file or assembly 'Microsoft.Web.WebView2.WinForms, Version=1.0.864.35, Culture=neutral, PublicKeyToken=2a8ab48044d2601e' or one of its dependencies. The system cannot find the file specified.

该异常明显引用了SDK,而不是runtime。查看SDK 1.0.864.35的发行说明以了解运行时支持,我看到:“要加载的最低运行时版本:86.0.616.0或更新版本”。我安装了91. 0. 864. 59,这样应该可以工作。
我在Windows中的开发经验有限,这是我在任何地方的第一个C#应用程序,所以我可能错过了一些基本的东西。我确实看到了一些对WebView2Loader.dll的引用。我不清楚这是否只适用于C应用程序,或者它是否对C#也有意义--到目前为止,绝大多数示例代码和问答仍然主要集中在C上,(例如,所有的部署文档都是这样的)。如果这个DLL对C#确实重要,我就把它复制到我的目标文件夹中,但这没有任何作用。
总而言之,如何使用WebView 2 WinForm组件部署C#应用程序,使其使用Runtime而不是NuGet安装的SDK?

qrjkbowd

qrjkbowd1#

答案是,必须将四个DLL从SDK复制到已安装应用程序的.exe目录中。

WebView2Loader.dll
Microsoft.Web.WebView2.Core.dll
Microsoft.Web.WebView2.Wpf.dll
Microsoft.Web.WebView2.WinForms.dll

所有四个文件都可以在NuGet包目录中找到。这是我系统上的.nuget\packages\microsoft.web.webview2\1.0.864.35
在构建过程中,msbuild的某个子进程也将这四个文件复制到了我的Release文件夹中,但我不知道具体是什么做的,也不知道它是否是标准的。
当且仅当所有这四个SDK DLL都复制到.exe文件夹中时,安装的WebView2应用程序才会使用运行时。

q5lcpyga

q5lcpyga2#

在我的案例中,问题是通过安装Microsoft Edge Canary解决的

xu3bshqb

xu3bshqb3#

以下是您需要执行的操作:

解决方案:从microsoft官方运行时安装webview2运行时
原因:您也需要此运行时,就像.net framework一样。
变更:它在以下位置创建一个目录:%localappdata%\Microsoft\EdgeWebView\Application\105.0.1343.33
发货:包括在线安装程序,这是1300KB与您的应用程序。

相关问题