Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法

这篇具有很好参考价值的文章主要介绍了Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


使用Visual Studio创建了一个.NET Maui Blazor 应用,通过Visual Studio调试Windows应用时,需要打开开发者模式

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法

打开开发者模式,调试一切正常,但如果直接运行bin文件夹下对应目录的exe时,没有任何反应,事件查看器中,会有这样的提示:

Exception Info: System.DllNotFoundException: Unable to load DLL 'Microsoft.ui.xaml.dll' or one of its dependencies: 找不到指定的模块。

那么如何才可以打包exe文件呢?当然少不了搜索操作了。
“查找资料"发现,要运行Maui生成的exe文件,必须通过MSIX Packaging Tool来生成。

也有高手说,通过Fuslogvw找到所有的依赖项,如果运气好的话,可以成功运行,也可以打包成zip发送给其他电脑上。

那么如何制作制作一个 “可部署” 的windows应用呢?

创建签名证书

备注:创建和使用自签名证书时,只有安装和信任证书的用户才能运行应用。

1、PowerShell 终端,并使用项目导航到目录。
2、使用New-SelfSignedCertificate使用命令生成自签名证书。

New-SelfSignedCertificate -Type Custom `
                          -Subject "CN=Test" `
                          -KeyUsage DigitalSignature `
                          -FriendlyName "My temp dev cert" `
                          -CertStoreLocation "Cert:\CurrentUser\My" `
                          -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

3、使用Get-ChildItem命令查询已创建的证书的证书存储:

Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Subject, FriendlyName, Thumbprint

可以看到以下类似结果:

Thumbprint                               Subject                                  FriendlyName
----------                               -------                                  ------------

07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0 CN=Contoso                               My temp dev cert

4、记录下Thumbprint的值,后面需要使用。

配置生成设置

双击项目名称,或导航到项目根目录,打开.csproj文件,在与之间,加上如下配置项

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
    <PackageCertificateThumbprint>07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

将PackageCertificateThumbprint节点的值,换成刚才记录下的Thumbprint的值。整个文件看起来是这样的:

<Project Sdk="Microsoft.NET.Sdk.Razor">

    <PropertyGroup>
        <TargetFrameworks>net6.0-android;net6.0-ios;net6.0-maccatalyst</TargetFrameworks>
        <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks>
        <!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
        <!-- <TargetFrameworks>$(TargetFrameworks);net6.0-tizen</TargetFrameworks> -->
        <OutputType>Exe</OutputType>
        <RootNamespace>MauiApp1</RootNamespace>
        <UseMaui>true</UseMaui>
        <SingleProject>true</SingleProject>
        <ImplicitUsings>enable</ImplicitUsings>
        <EnableDefaultCssItems>false</EnableDefaultCssItems>

        <!-- Display name -->
        <ApplicationTitle>MauiApp1</ApplicationTitle>

        <!-- App Identifier -->
        <ApplicationId>com.companyname.mauiapp1</ApplicationId>
        <ApplicationIdGuid>E0ADEA09-F808-4CAC-B28B-0C409C8B032B</ApplicationIdGuid>

        <!-- Versions -->
        <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
        <ApplicationVersion>1</ApplicationVersion>

        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">14.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
        <TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
    </PropertyGroup>

    <ItemGroup>
        <!-- App Icon -->
        <MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />

        <!-- Splash Screen -->
        <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />

        <!-- Images -->
        <MauiImage Include="Resources\Images\*" />
        <MauiImage Update="Resources\Images\dotnet_bot.svg" BaseSize="168,208" />

        <!-- Custom Fonts -->
        <MauiFont Include="Resources\Fonts\*" />

        <!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
        <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
    </ItemGroup>
	<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
		<AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
		<PackageCertificateThumbprint>A10612AF095FD8F8255F4C6691D88F79EF2B135E</PackageCertificateThumbprint>
	</PropertyGroup>
	<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
		<RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
	</PropertyGroup>
</Project>

发布

打开 VS 终端的开发人员命令提示符 并导航到.NET MAUI 应用项目的文件夹,运行dotnet publish 命令。并提供一下参数

参数
-f net6.0-windows{version} 目标框架,它是 Windows TFM,例如 net6.0-windows10.0.19041.0。 确保此值与 .csproj 文件中节点的值相同。
-c Release 设置生成配置,即 Release。
/p:RuntimeIdentifierOverride=win10-x64 或 /p:RuntimeIdentifierOverride=win10-x86 避免 WindowsAppSDK 问题 #2940 中详述的 bug。 -x64根据目标平台选择参数的或-x86版本。

例如:

dotnet publish -f net6.0-windows10.0.19041.0 -c Release /p:RuntimeIdentifierOverride=win10-x64

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
如果一切顺利,在bin目录下,会生成 Release\net6.0-windows10.0.19041.0\win10-x64\AppPackages\MauiApp1_1.0.0.1_Test文件夹,MauiApp1_1.0.0.1_Test 是我生成的目录,他在实际中,应该是实际创建的应用名称,在MauiApp1_1.0.0.1_Test目录下,会有一个msix 文件,这就是生成的 应用包,应用包并非传统的exe或者msi文件,而是全新的安装包格式

安装应用

若要安装应用,必须使用已信任的证书进行签名。 如果不是,Windows 不会让你安装应用。 将显示如下所示的对话框,其中禁用了“安装”按钮:

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
这里需要信任证书操作,
1、右键单击 .msix 文件,然后选择 “属性”。

2、选择 “数字签名 ”选项卡。

3、选择证书,然后点击 详细信息

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
4、选择 “查看证书”。

5、选择 “安装证书…

6、选择 “本地计算机”,然后选择“ 下一步”。

7、如果用户帐户控制提示 你希望允许此应用对设备进行更改?,选择“ ”。

8、在“证书导入向导” 窗口中,选择“将所有证书放在以下存储区中”。

9、选择“浏览…”,然后选择“受信任人”。 选择“确定”关闭对话框。

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
这时会提示导入成功

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
点击确定关闭对话框,再次双击 .msix,已可以正常安装了。

Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
至此,成功打包了可安装的应用,安装完成后,在开始菜单就可以找到安装好的应用程序。并可以正常打开了
Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法
目前来说,MAUI应用程序只支持所谓的“打包”应用。需要发布到 MSIX 并安装它们才能运行。未打包即可使用的场景,官方也正在努力。我们可以到https://github.com/dotnet/maui/issues/3166 跟踪进度。


参考:
发布适用于Windows的.NET MAUI应用:https://learn.microsoft.com/zh-cn/dotnet/maui/windows/deployment/overview

创建用于包签名的证书:https://learn.microsoft.com/zh-cn/windows/msix/package/create-certificate-package-signing

New-SelfSignedCertificate:https://learn.microsoft.com/zh-cn/powershell/module/pki/new-selfsignedcertificate?view=windowsserver2019-ps&preserve-view=true

什么是 MSIX?:https://learn.microsoft.com/zh-cn/windows/msix/overview文章来源地址https://www.toymoban.com/news/detail-443568.html

到了这里,关于Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在MAUI中使用Masa Blazor

    在此之前我们已经介绍过什么是 Masa Blazor ,以及如何使用 Masa Blazor ,如果还有不了解 Masa Blazor 的同学可以看我上篇文章【初识Masa Blazor】。那么今天就带大家探索一下如何在 MAUI 中使用 Masa Blazor ,那么我们先来了解一下什么是MAUI? .NET MAUI全称为 .NET Multi-platform App UI ,顾名思

    2024年02月09日
    浏览(36)
  • MAUI+Blazor混合应用开发示例

    笔者之前在公司搭建过一套生产管理系统,该系统要求能和硬件进行串口通信,同时又要方便后台进行信息查询。笔者给出的解决方案就是: MAUI + Blazor ,这样只需要提供一套UI,就能满足桌面端、移动端和Web端三种不同应用场景。今天要介绍的是基于桌面端的开发实现(实

    2024年02月11日
    浏览(33)
  • bh002- Blazor hybrid / Maui 保存设置快速教程

    1. 建立工程 bh002_ORM 源码 2. 添加 nuget 包 3. 添加命名空间引用 _Imports.razor @using BootstrapBlazor.Components 4. 添加服务 MauiProgram.cs 在 return builder.Build(); 之前加入这句 5. 添加代码后置文件 Pages/Index.razor.cs Index.razor.cs 6. 添加 UI Index.razor 7. 执行效果 8. 添加清除按钮 Index.razor Index.razor.c

    2024年02月11日
    浏览(37)
  • bh003- Blazor hybrid / Maui 使用蓝牙BLE快速教程

    源码 https://github.com/densen2014/BlazorHybrid/tree/master/bh100days/bh003_ble?WT.mc_id=DT-MVP-5005078 BlazorHybrid.Maui.Permissions 因为源码比较长,主要是一些检查和申请权限,BLE权限相关代码,就不占用篇幅列出,感兴趣的同学直接打开源码参考 顺便打开可空 Nullableenable/Nullable 安卓 AndroidManifest.xml iOS I

    2024年02月11日
    浏览(45)
  • C# Blazor 学习笔记(5):blazor文件夹组件引入

    为了更好的组件化管理整个文件,我选择使用分文件夹对项目组件进行分类。 Shared:Layout布局空间放置地方,由于默认创建,动也不好动,我就不动这个名称了,原本想改成Layout的 Pages:业务页面 Components:自定义组件文件 我创建了B_Col和B_Row两个组件。因为我怕我的命名和

    2024年02月14日
    浏览(42)
  • SQL Server安装提示安装程序无法通过windows update服务搜索更新

    安装 SQL Server 时提示: SQL Server 安装程序遇到以下错误: 安装程序在运行作业 UpdateResult 时失败。 错误代码 0x876E0003。 开启 Windows 自动更新或关闭自动更新、不勾选 “使用 Microsoft Update 检查更新(推荐)” 均 无法继续安装 解决方法: 手动创建 DefaultSetup.ini 放置到安装程序文

    2024年02月11日
    浏览(41)
  • 【Windows】Windows 无法访问共享文件夹的解决办法

    今天在配置 iPhone 连电脑进行文件共享的时候遇到了“连接传输文件显示连接服务器用户或密码无效”的问题,通过查询更改了控制面板文件共享设置,发现能进去看见文件夹但是访问不了文件。 然后我又用我的同一个局域网的电脑尝试连接,发现还是一样的问题,能看到文

    2024年02月11日
    浏览(67)
  • Qt双击某一文件通过自己实现的程序打开,并加载文件显示

    简述 在Windows系统中,双击某类扩展名的文件,通过自己实现的程序打开文件,并正确加载及显示文件。有两种方式可以到达这个目的。 对于系统不知道的扩展名的文件,第一次打开时,需要自行设置打开方式。 设置流程: 右键或双击文件-打开方式,弹出以下界面 点击“在

    2024年02月11日
    浏览(50)
  • ubuntu 20.04 通过 samba 共享文件夹到 windows

    ubuntu 与 windows 共享,有两条路,一是 windows 的目录共享给 ubuntu,比如使用 VM Ware 虚拟机,直接通过 VMWare 虚拟机共享文件夹的方式,windows 上的目录就共享给了 ubuntu ubuntu 如何把目录共享给 windows 呢? 文件目录共享,ubuntu 与 windows 谁共享,有区别吗? 文件或者目录的主要区

    2024年02月09日
    浏览(55)
  • Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘

    压缩时需要使用7-zip进行调用,因此根据自己电脑进行安装 官网:https://www.7-zip.org/ 新建记事本文件,重命名为git_back_up.bat 注意:如果不设置可能会导致定时任务无法执行 开“控制面板-管理工具-本地安全策略”,选择“安全设置-本地策略-安全选项”,在右边列表中找到“

    2024年02月14日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包