WebView2Loader.dll 未找到 Outlook VSTO 插件

WebView2Loader.dll not found is Outlook VSTO addin

我阅读了有关 WebView2Loader.dll - 找不到文件的问题,但无法解决我的问题:

带有 FormRegion 的简单 Outlook VSTO 加载项, 在 FormRegion 中,我放置了 WebView2 控件,并对其进行了初始化:

 private async void FormRegionWebView2_FormRegionShowing(object sender, System.EventArgs e)
        {
            await InitializeCoreWebView2Async(webView2Ctrl, @"C:\temp");
            webView2Ctrl.Source = new Uri("http://www.bing.com");
        }

 public async Task InitializeCoreWebView2Async(WebView2 wv, string webCacheDir)
        {
            CoreWebView2EnvironmentOptions options = null;
            CoreWebView2Environment webView2Environment = null;
           
            webView2Environment = await CoreWebView2Environment.CreateAsync(null, webCacheDir, options);

            await wv.EnsureCoreWebView2Async(webView2Environment);
        }

本机 dll 在 bin\Debug\runtimes 文件夹中,

但我仍然得到 'WebView2Loader.dll': 在 InitializeCoreWebView2Async() 中找不到指定的模块

代码如下: https://github.com/MicrosoftEdge/WebView2Feedback/files/8117191/OutlookAddInWithWebView.zip

如有任何帮助,我们将不胜感激。

首先,确保MSDN中的WebView2 Runtime is installed on the system. You can read more about that in the WebView2 Runtime installation部分。

WebView2Loader.dll 是本机和 architecture-specific 二进制文件,因此您需要包含您希望您的应用 运行 包含的此二进制文件的所有版本。例如:

  • 对于 x86,您将包含 WebView2Loader.dll 的 x86 版本。
  • 对于使用 AnyCPU 的托管应用程序,您将包括 WebView2Loader.dll 的 x86、x64 和 arm64 版本。 WebView2Loader.dll 的正确版本是从相应的 architecture-specific 文件夹加载的。

确保包含了所有必需的 platform-specific 程序集。在 Files to ship with the app 文章中阅读更多相关信息。


顺便说一句,我发现了一个类似的问题 - Unable to load DLL 'WebView2Loader.dll': The specified module could not be found.。这与您描述的非常接近。

事实证明,Outlook 无法从运行时文件夹中获取 WebView2Loader.dll, 它必须在输出目录本身。

指定平台目标(到 x86)是不够的,dll 仍然只在运行时。 (目标框架是:.NET framework 4.7.2)

仅从 nuget packages.config 迁移到 PackageReference(如此处所述:https://docs.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference) 并指定平台目标 导致 dll 被复制到输出目录 (bin\Debug)。

我们必须准备两个单独的 ClickOnce 安装程序,一个用于 x86,一个用于 x64, 但现在 Outlook 找到了 dll,WebView2 在 FormRegion 中显示网页。

更新: 实际上这还不足以将 WebView2Loader.dll 添加到 ClickOnce application_files。
为此,我必须将 dll 定义为 csproj 文件中的内容:
在Visual Studio (2022)“卸载项目”中,然后“编辑项目文件”以获取add-in的.csproj为xml,并添加以下内容:

  <ItemGroup>
    <Content Include="$(MSBuildThisFileDirectory)bin$(Configuration)\runtimes\win-$(EffectivePlatform)\native\WebView2Loader.dll">
      <Link>%(Filename)%(Extension)</Link>
      <PublishState>Included</PublishState>
      <Visible>False</Visible>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <Pack>false</Pack>
    </Content>
  </ItemGroup>

重新加载和发布后,Loader dll 位于 ClickOnce 安装程序应用程序文件中,add-in 可以分发。