我创建了一个基于.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?
3条答案
按热度按时间qrjkbowd1#
答案是,必须将四个DLL从SDK复制到已安装应用程序的
.exe
目录中。所有四个文件都可以在NuGet包目录中找到。这是我系统上的
.nuget\packages\microsoft.web.webview2\1.0.864.35
。在构建过程中,
msbuild
的某个子进程也将这四个文件复制到了我的Release
文件夹中,但我不知道具体是什么做的,也不知道它是否是标准的。当且仅当所有这四个SDK DLL都复制到
.exe
文件夹中时,安装的WebView2应用程序才会使用运行时。q5lcpyga2#
在我的案例中,问题是通过安装Microsoft Edge Canary解决的
xu3bshqb3#
以下是您需要执行的操作:
解决方案:从microsoft官方运行时安装webview2运行时
原因:您也需要此运行时,就像.net framework一样。
变更:它在以下位置创建一个目录:
%localappdata%\Microsoft\EdgeWebView\Application\105.0.1343.33
发货:包括在线安装程序,这是1300KB与您的应用程序。