.NET Core 6发布报多个输出文件相对路径重复错误如何解决
解决方案
核心原因说明
你尝试的所有静态配置方式均不生效,是因为项目引用的资源项是在.csproj中静态ItemGroup执行完成后,才由SDK动态导入的,直接写Content的更新/移除规则匹配不到来自项目B的配置文件。
可行方案1(推荐,无侵入)
直接修改被引用项目B的.csproj配置,从根源避免配置文件被传递到引用项目的发布输出:
<ItemGroup> <!-- 保留本地构建时输出配置,发布时不传递到引用项目 --> <Content Update="appsettings.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="Never" /> <Content Update="appsettings.*.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="Never" /> </ItemGroup>
该配置不会影响项目B本地运行时的配置读取,仅禁止它的配置文件被带到引用项目的发布目录。
可行方案2(无需修改项目B)
在主项目A的.csproj文件末尾添加后置处理目标,在所有项目资源解析完成后批量移除来自B的配置文件:
<Target Name="RemoveDuplicateAppSettingsFromB" AfterTargets="ResolveProjectReferences"> <ItemGroup> <!-- 移除所有来自项目B的appsettings相关资源 --> <Content Remove="%(Content.Identity)" Condition="$([System.String]::Copy('%(Content.Identity)').Contains('\B\appsettings'))" /> <ResolvedFileToPublish Remove="%(ResolvedFileToPublish.Identity)" Condition="$([System.String]::Copy('%(ResolvedFileToPublish.Identity)').Contains('\B\appsettings'))" /> </ItemGroup> </Target>
验证步骤
配置完成后请先删除项目A和B的bin、obj缓存目录,再重新执行发布操作即可解决重复文件报错。
内容的提问来源于stack exchange,提问作者user9807202
相关产品推荐
相关产品推荐

