使用 CLI 发布适用于 Windows 的未打包的 .NET MAUI 应用

分发适用于 Windows 的 .NET Multi-platform App UI (.NET MAUI) 应用时,可以将应用及其依赖项发布到文件夹,以便部署到另一个系统。

配置项目生成设置

将以下 <PropertyGroup> 节点添加到项目文件中。 仅当目标框架为 Windows 且配置设置为 Release 时,此属性组才会得到处理。 每当生成或发布处于 Release 模式时,此配置部分都会运行。

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

要在 Windows 应用 SDK 中解决 bug,需要此示例中的 <PropertyGroup>。 有关 bug 的详细信息,请参阅 WindowsAppSDK 问题 #3337

发布

若要发布应用,请打开 VS2022 开发人员命令提示终端,然后导航到 .NET MAUI 应用项目的文件夹。 运行 dotnet publish 命令,并提供以下参数:

参数
-f 目标框架,即 net8.0-windows{version}。 此值为 Windows TFM,如 net8.0-windows10.0.19041.0。 确保此值与 .csproj 文件中 <TargetFrameworks> 节点中的值相同。
-c 生成配置,即 Release
-p:RuntimeIdentifierOverride=win10-x64
- 或 -
-p:RuntimeIdentifierOverride=win10-x86
避免 WindowsAppSDK 问题 #3337 中详述的 bug。 根据目标平台选择 -x64-x86 版本的参数。
-p:WindowsPackageType 包类型,对于未打包的应用,其为 None
-p:WindowsAppSDKSelfContained 应用的部署模式,可以是依赖于框架的,也可以是独立的。 对于独立应用,此值应为 true。 有关依赖于框架的应用和独立应用的详细信息,请参阅 Windows 应用 SDK 部署概述

警告

尝试发布 .NET MAUI 解决方案将会导致 dotnet publish 命令尝试单独发布解决方案中的每个项目,当你已经将其他项目类型添加到解决方案时,这可能会导致出现问题。 因此,dotnet publish 命令的作用范围应为 .NET MAUI 应用项目。

例如:

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None

注意

在 .NET 8 中,dotnet publish 命令默认为 Release 配置。 因此,可以从命令行中省略生成配置。

发布会生成应用,将可执行文件复制到 bin\Release\net8.0-windows10.0.19041.0\win10-x64\publish 文件夹。 在此文件夹中,有一个 exe 文件,即生成的应用。 可以启动此应用,也可以将整个文件夹复制到另一台计算机并在那里启动。

与打包的应用的重要区别在于,这不会在文件夹中包含 .NET 运行时。 这意味着该应用要求首先在最终运行该应用的计算机上安装 .NET 运行时。 为了确保应用还包含所有运行时组件,可以在发布时提供 -p:WindowsAppSDKSelfContained 参数。 例如:

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None -p:WindowsAppSDKSelfContained=true

有关 dotnet publish 命令的详细信息,请参阅 dotnet publish