代码
csproj
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2210.55" />
<PackageReference Include="OrchardCore.Application.Cms.Targets" Version="1.8.1" />
OrchardCoreHost类
public class OrchardCoreHost
{
private WebApplicationBuilder _webBuilder;
private WebApplication _webApplication;
public async Task Start()
{
_webBuilder = WebApplication.CreateBuilder();
_webBuilder.Services.AddOrchardCms();
_webApplication = _webBuilder.Build();
_webApplication.UseStaticFiles();
_webApplication.UseOrchardCore();
await _webApplication.RunAsync();
}
public async Task Stop()
{
await _webApplication.StopAsync();
}
}
MainWindow类
public partial class MainWindow : Window
{
private OrchardCoreHost _orchardCoreHost;
public MainWindow()
{
InitializeComponent();
_orchardCoreHost = new OrchardCoreHost();
InitializeAsync();
}
private async void InitializeAsync()
{
await _orchardCoreHost.Start();
webView.CoreWebView2.ServerCertificateErrorDetected += WebView_ServerCertificateErrorDetected;
await webView.EnsureCoreWebView2Async(null);
}
void WebView_ServerCertificateErrorDetected(object sender, CoreWebView2ServerCertificateErrorDetectedEventArgs e)
{
CoreWebView2Certificate certificate = e.ServerCertificate;
e.Action = CoreWebView2ServerCertificateErrorAction.Cancel;
}
}
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<!--添加一个WebBrowser -->
<wv2:WebView2 x:Name="webView" Source="http://localhost:5000" />
</Grid>
</Window>
截图
结果
生成单个exe成功,运行速度有点慢,再次打包遇到Http 500 问题,用vs 20222调试代码的生成速度太慢了,生成的单个文件大小为155MB,我决定放弃这个方向了。
缺点总结
- 生成代码慢非常降低调试速度
- 生成的包太大了,electron才不到100MB
- 代码没有加密过,但是运行速度就是有点慢,可能是webview2造成的,不清楚原因,wpf的webbrowser更难用,直接js报错,使用wpf集成浏览器这个方向还是太新了