如何强制Windows Application Packaging Project使用Native AOT?
解决Windows Application Packaging Project无法使用.NET Native AOT的问题
Windows Application Packaging Project(简称WAP)默认不会触发Native AOT的发布流程,它只会走常规.NET应用的发布逻辑,因此会忽略PublishAot这类AOT专属配置项。下面是两种可行的解决思路:
方法1:手动生成AOT产物后用MSIX打包工具打包
- 先通过命令行生成Native AOT的发布文件:
dotnet publish -c Release -r win-x64 --self-contained true
(把win-x64换成你需要的架构,比如win-x86或win-arm64)
- 打开MSIX打包工具(微软商店可直接安装),选择「应用安装程序」项目,导入刚才发布文件夹里的
console-application.exe,跟着向导完成打包配置,就能生成符合微软商店要求的MSIX包。
方法2:修改WAP配置,强制引用AOT发布产物
- 先确认你的控制台项目已经配置好AOT相关属性:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <AssemblyName>console-application</AssemblyName> <OutputType>Exe</OutputType> <TargetFramework>net7.0-windows</TargetFramework> <Nullable>enable</Nullable> <PublishAot>true</PublishAot> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 指定目标架构 --> <SelfContained>true</SelfContained> </PropertyGroup> </Project>
- 编辑WAP项目的
.wapproj文件,添加以下配置,让它直接使用控制台项目的AOT发布输出:
<PropertyGroup> <!-- 禁用WAP自动发布逻辑,改用预先生成的AOT产物 --> <PublishProfile>None</PublishProfile> </PropertyGroup> <ItemGroup> <!-- 引入AOT发布后的所有文件 --> <Content Include="..\console-application\bin\Release\net7.0-windows\win-x64\publish\**"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
注意替换路径为你控制台项目的实际发布路径。
- 确保Package.appxmanifest里的执行别名指向AOT生成的可执行文件:
<Extensions> <uap5:Extension Category="windows.appExecutionAlias" Executable="console-application.exe" EntryPoint="Windows.FullTrustApplication"> <uap5:AppExecutionAlias> <uap5:ExecutionAlias Alias="console-application.exe" /> </uap5:AppExecutionAlias> </uap5:Extension> </Extensions>
关键提示
- WAP的发布逻辑是为传统.NET应用设计的,本身不支持直接触发Native AOT编译,所以必须绕开它的默认发布流程。
- 无论用哪种方法,都要保证Runtime Identifier和目标平台一致,否则打包后的MSIX可能无法正常运行。
- 验证是否成功的方法:打开打包后的MSIX包,里面应该只有单个
console-application.exe(无大量.NET运行时附属文件)。
内容的提问来源于stack exchange,提问作者Danitechnik
相关产品推荐
相关产品推荐

