构建MAUI Windows应用触发APPX1101错误:存在重复README.md文件
解决MAUI Windows平台APPX1101重复README.md文件错误
问题分析
- 在Windows环境的MAUI项目中引用两个自带
README.md的自定义NuGet包(Foo.Bar 1.2.3、Ping.Pong 4.5.6)时,构建触发APPX1101错误,提示Payload目录下存在重复路径的README.md。 - 该问题仅针对Windows平台,Android、iOS、Mac Catalyst无此异常,且net7、net8 SDK(含8.0.101)均存在此现象。
- 核心原因是Windows平台打包APPX时,默认会将NuGet包中的非程序集资源(如
README.md)复制到Payload根目录,若多个包包含同名文件且未指定唯一输出路径,就会引发文件冲突。
解决方案
方案1:修改NuGet包的打包配置
在自定义NuGet包的项目文件(.csproj)中,为README.md指定带包ID的唯一输出路径,避免根目录冲突:
<ItemGroup> <None Include="README.md" Pack="true" PackagePath="contentFiles\any\any\$(PackageId)\README.md" /> </ItemGroup>
打包后,每个包的README.md会被放到以自身包ID命名的子目录下,彻底避免重复。
方案2:在MAUI项目中排除重复文件
如果无法修改NuGet包,可在MAUI项目的Windows平台配置中,排除其中一个包的README.md:
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-windows10.0.19041.0'"> <Content Remove="@(Content)" Condition="%(Filename) == 'README.md' and %(SourcePath) Contains 'Foo.Bar'" /> </ItemGroup>
根据实际情况替换Foo.Bar为需要排除的包名称,确保Payload目录下仅保留一个README.md。
方案3:禁用NuGet包资源自动复制
在MAUI项目文件中,配置禁止自动复制NuGet包中的非必要资源到Payload目录:
<PropertyGroup Condition="'$(TargetFramework)' == 'net8.0-windows10.0.19041.0'"> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>
注意:此方法会禁用所有默认内容项的自动复制,需手动添加项目自身需要的资源文件。
验证步骤
- 清理MAUI项目的bin和obj目录
- 执行
dotnet build -f net8.0-windows10.0.19041.0命令重新构建 - 确认
APPX1101错误消失,Windows平台打包成功
内容的提问来源于stack exchange,提问作者XDS
相关产品推荐
相关产品推荐

