wpf WebView2在debug中工作,但在使用ClickOnce发布时不工作

ubby3x7f  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(96)

我在本地发布了一个C# WPF MVVM(Caliburn Micro)应用程序,当我尝试使用WebView2显示网页时,出现以下事件查看器消息。该网页在调试中显示良好。
产品描述:由于未处理的异常,进程终止。异常信息:System.DllNotFoundException:找不到Dll。在Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateCoreWebView2EnvironmentWithOptions(String browserExecutableFolder,String userDataFolder,ICoreWebView2EnvironmentOptions options,ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler environment_created_handler)在Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(String browserExecutableFolder,String userDataFolder,CoreWebView2EnvironmentOptions options options)在IGPC2WPF.Views.BrowserView.InitializeAsync()
我看到它与userDataFolder有关,并尝试了一些解决方案,从堆栈溢出,但仍然没有运气。
我不明白的是似乎创建了EBWebView文件夹,我认为是userData文件夹,所以为什么会出错?是不是有一些权限问题?
WebView2Loader.dll位于发布目录中
EBWebView的位置是:C:\Users*\AppData\Local\Temp\IGPC2WPF\EBWebView
这是我的xaml和代码背后的文件显示网站。

XAML视图

<UserControl x:Class="IGPC2WPF.Views.BrowserView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:local="clr-namespace:IGPC2WPF.Views"             
         xmlns:cal="http://caliburnmicro.com"
         xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
         mc:Ignorable="d" Background="#3b3b3b"
         d:DesignHeight="450" d:DesignWidth="800">
<Grid>      
    <wv2:WebView2 x:Name="WebView" Source="{Binding PdfAddress, Mode=TwoWay}" />
</Grid>

字符串

视图模型

private string _address;
private readonly IEventAggregator _events;
private readonly IConfiguration _config;

public string Address
{
    get { return _address; }
    set { _address = value; NotifyOfPropertyChange(() => Address); }
}

public BrowserViewModel(IEventAggregator events, IConfiguration config)
{
    _events = events;
    _config = config;

    _address = _config.GetValue<string>("MiscURLs:WorkToListReport");
}

public void Close()
{
    _events.PublishOnUIThreadAsync(new GenerateExcelDataEvent());
    TryCloseAsync();
}

代码隐藏:

public partial class BrowserView : UserControl
{
    public WebPageView()
    {
        InitializeComponent();
        InitializeAsync();
    }

    async void InitializeAsync()
    {
        string userDataFolder = Path.Combine(Path.GetTempPath(), "IGPC2WPF");
        WebView.CreationProperties = new()
        {
            UserDataFolder = userDataFolder
        };

        await WebView.EnsureCoreWebView2Async(null);

    }
}

  • 编辑 * 好的,似乎问题是当我在发布目录中运行setup.exe时,存在的WebView2Loader.dll没有被复制到安装目录。如果我手动将其移动到安装位置,网页显示正常。

如何确保在ClickOnce中复制此dll?

rkttyhzu

rkttyhzu1#

我发现了一个类似的问题,似乎已经修复了WebView2Loader.dll没有安装到根最终安装文件夹的问题。
在.csproj文件中,我添加了:

<PropertyGroup>
    <WebView2LoaderPreference>Static</WebView2LoaderPreference>
</PropertyGroup>

<ItemGroup>
    <PublishFile Include="runtimes\win-x64\native\WebView2Loader.dll">
        <Visible>False</Visible>
        <Group>
        </Group>
        <TargetPath>WebView2Loader.dll</TargetPath>
        <PublishState>Include</PublishState>
        <IncludeHash>True</IncludeHash>
        <FileType>File</FileType>
    </PublishFile>
</ItemGroup>

字符串
现在,这将所需的文件复制到根目录,应用程序的webview页面可以正常工作。

相关问题