将 WebView2 映射到相对路径

Mapping WebView2 to a relative path

我正在开发一个 WPF 项目(Visual Studio 2022 和 Net 6.0)。我的项目 (MyNotices) 的文件夹中有本地 html 文件。我在 xaml 代码中有 WebView2,如下所示

    <DockPanel Width="1200" Height="600" Visibility="Visible" x:Name="web1">
             <wv2:WebView2 x:Name="webView"  Width="{Binding ElementName=CurrentPresenter, Path=ActualWidth}" 
                           Height="{Binding ElementName=CurrentPresenter, Path=ActualHeight}" Source=""/>
    </DockPanel>

我想将 webview 的源映射到本地 html 文件。如果我使用 html 文件的绝对路径,效果很好,如下所示

       await webView.EnsureCoreWebView2Async();
       webView.Source = new Uri("/C:/Users/xxxx/source/repos/MyNotices/Local/RichText.html");

我想使用相对路径,我正在使用 SetVirtualHostNameToFolderMapping 这是代码

  await webView.EnsureCoreWebView2Async(); // ensure the CoreWebView2 is created
          webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
            "appassets", "Local", CoreWebView2HostResourceAccessKind.Allow);
             webView.Source = new Uri("http://appassets/RichText.html");

这是我的 app.exe 文件的位置 C: \Users\xxxx\source\repos\MyNotices\bin\Debug\net6.0-windows\MyNotices.exe.

我收到此错误消息 - System.IO.DirectoryNotFoundException:'The system cannot find the path specified. (0x80070003)'。任何帮助将不胜感激

您的示例假设文件 Local/RichText.html 位于 .exe 的输出文件夹中,即在 C:\Users\xxxx\source\repos\MyNotices\bin\Debug\net6.0-windows\Local\RichText.html.

来自docs:

For example, after calling SetVirtualHostNameToFolderMapping("appassets.example", "assets", CoreWebView2HostResourceAccessKind.Deny);, navigating to https://appassets.example/my-local-file.html will show content from my-local-file.html in the assets subfolder located on disk under the same path as the app's executable file.

因此,将 Local/RichText.html 文件添加到 Visual Studio 中的项目并将其 Build Action 属性 设置为 Content 并将其 Copy to Output Directory 属性 到 Copy if newer.

如果文件位于应用程序的输出目录之外,您应该使用绝对路径来访问它。相对路径是指.exe.

文件夹内的文件