将 .net MAUI 应用程序发布为 Windows 可执行文件

15

我如何将一个.net MAUI应用程序发布为单个可执行文件?这是可能的吗? 我有一个应用程序,我希望我的朋友们能在他们的Windows PC上使用。是否有任何方法可以不使用命令提示符来实现?


如果是UWP应用程序,那么您应该能够使用普通的UWP发布选项。 - Jason
1
如果是“Windows桌面”应用程序,则答案是MSIX打包工具。我还没有尝试过它-鉴于VS 2022预览版和MAUI都是..预览版,您可能会遇到问题。 - ToolmakerSteve
2个回答

21

随着 .NET MAUI 6.0.400 (服务发布 1) 的新版本发布,您可以将应用程序构建为可工作的 exe 文件。

在 Visual Studio 中: 右键单击解决方案并在终端中打开。 运行以下命令:

msbuild /restore /t:build /p:TargetFramework=net6.0-windows10.0.19041 /p:configuration=release /p:WindowsAppSDKSelfContained=true /p:Platform=x64 /p:WindowsPackageType=None /p:RuntimeIdentifier=win10-x64

如果您想针对一些传统系统使用x86:

msbuild /restore /t:build /p:TargetFramework=net6.0-windows10.0.19041 /p:configuration=release /p:WindowsAppSDKSelfContained=true /p:Platform=x86 /p:WindowsPackageType=None /p:RuntimeIdentifier=win10-x86

可在 \bin\x64\release\net6.0-windows10.0.19041\win10-x64 中找到构建 exe(x64)文件。


发布为单个文件是可能的,但目前存在一些小问题,例如需要将图像从构建文件夹复制到发布文件夹才能正常工作。位于 wwwroot 文件夹中通过 Blazor 使用的图像则没有问题。
发布命令:

msbuild /restore /t:Publish /p:TargetFramework=net6.0-windows10.0.19041 /p:configuration=release /p:WindowsAppSDKSelfContained=true /p:Platform=x64 /p:PublishSingleFile=true /p:WindowsPackageType=None /p:RuntimeIdentifier=win10-x64

可执行文件(x64)位于 \bin\x64\release\net6.0-windows10.0.19041\win10-x64\publish\ 目录下。


1
按照您说的做了,但出现了错误:sigh。C:\Users\Gordon\source\repos\RouteIt\RouteIt.sln.metaproj: 错误 MSB4126:指定的解决方案配置“release|x64”无效。请使用 Configuration 和 Platform 属性指定有效的解决方案配置(例如 MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU"),或将这些属性留空以使用默认解决方案配置。[C:\Users\Gordon\source\repos\RouteIt\RouteIt.sln] 为什么 release x64 是无效的?它是一个 64 位机器。 - gfmoore
我已经查看了错误并尝试了一些方法,但没有成功。我已将下拉菜单设置为“发布”并从“生成”中构建了解决方案,现在有一个包含数百个文件和RouteIt.exe的文件夹,但即使在原地也没有任何作用。 - gfmoore
2
非常抱歉 :( C:\Program Files\dotnet\sdk\6.0.400-preview.22330.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(267,5): error NETSDK1005: 资源文件 'C:\Users\Gordon\source\repos\RouteIt\obj\project.assets.json' 没有针对 'net6.0-windows10.0.19041' 的目标。请确保已运行还原操作,并在项目的 TargetFrameworks 中包含 'net6.0-windows10.0.19041'。[C:\Users\Gordon\source\repos\RouteIt\RouteIt.csproj] - gfmoore
1
Ingo的第一个解决方案可以构建一个可工作的可执行文件(在一个带有所有垃圾的文件夹中),尽管对于我使用mapsui的应用程序,当我从Visual Studio运行时,一开始不会出现地图。之后就没问题了,但我还没有找到独立exe的解决方案。我在.net Maui Github上提出了这个问题,但像往常一样,他们似乎不太感兴趣。我还没有打算将其包装到安装程序中,因为我有(微弱的)希望随着更多人使用Maui,对解决方案的呼声可能会促使他们采取行动。 - gfmoore
6
@gfmoore 我不明白为什么这不是优先考虑的事情。无论当今流行的安装过程是什么,作为最终用户运行任何 .exe 文件都应该是可能的,带有所有相关的安全隐患,而且一直以来都是如此。如果没有像这样的基本功能,微软如何期望开发人员从 WinForms 等迁移?你会认为从 Windows 8 和 Microsoft Store 的失败中他们已经意识到用户喜欢自由,而不是被强制塞进一个没有选择的鞋套盒子里。 - user4779
显示剩余8条评论

8

我的 MAUI 项目针对 .Net 7

1- 在您的 .NET MAUI csproj 文件中添加一个 <WindowsPackageType> 节点:

<WindowsPackageType Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">None</WindowsPackageType>

enter image description here

2- 在你的 launchSettings.json 中将 commandName 设置为 Project

enter image description here

3- 在Release模式下构建您的项目
4- 右键单击项目 -> 在文件资源管理器中打开文件夹
5- exe文件位于:bin -> Release -> net7.0-windows10.0.19041.0 -> win10-x64

添加了这个dotnet publish之后,也可以正常工作。 - Salar
接受的答案中的命令在这个配置中也能很好地工作(使用 dotnet 6.0)。 - 9 Guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接