使用 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。