如何解决.NET Core WinUI3应用中发布输出文件路径重复问题
问题场景
用Visual Studio 2022开发WinUI3的.NET项目(对接Microsoft Graph拉取Azure报告),打包部署到其他机器时触发重复文件错误:
error NETSDK1152: Found multiple publish output files with the same relative path: C:\Users\McTwitch\source\repos\Heimdall\obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\MsixContent\Microsoft.Web.WebView2.Core.dll, obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\R2R\Microsoft.Web.WebView2.Core.dll.
尝试在.csproj里加<ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>后,又出现APPX打包错误:
Severity Code Description Project Path File Line Source Suppression State Error APPX1101 Payload contains two or more files with the same destination path 'Microsoft.Web.WebView2.Core.dll'. Source files: C:\Users\McTwitch\source\repos\Heimdall\obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\MsixContent\Microsoft.Web.WebView2.Core.dll C:\Users\McTwitch\source\repos\Heimdall\obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\R2R\Microsoft.Web.WebView2.Core.dll SIEMGUI C:\Users\McTwitch\.nuget\packages\microsoft.windowsappsdk\1.2.221109.1\buildTransitive C:\Users\McTwitch\.nuget\packages\microsoft.windowsappsdk\1.2.221109.1\buildTransitive\Microsoft.Build.Msix.Packaging.targets 1504 Build
已检查NuGet包管理器的合并选项,无相关条目,也找不到common.props文件。
可行解决方法
1. 手动排除重复DLL
在项目的.csproj文件中添加配置,明确排除其中一份重复的DLL,保留另一份:
<ItemGroup> <!-- 移除两份重复的文件引用 --> <Content Remove="obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\R2R\Microsoft.Web.WebView2.Core.dll" /> <Content Remove="obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\MsixContent\Microsoft.Web.WebView2.Core.dll" /> <!-- 保留MsixContent下的版本,确保发布时复制 --> <Content Include="obj\x64\Release\net6.0-windows10.0.19041.0\win10-x64\MsixContent\Microsoft.Web.WebView2.Core.dll"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> </ItemGroup>
2. 关闭ReadyToRun编译
冲突根源可能是R2R(ReadyToRun)编译生成了重复的DLL,在.csproj的PropertyGroup中添加配置禁用R2R:
<PropertyGroup> <PublishReadyToRun>false</PublishReadyToRun> </PropertyGroup>
注意:关闭R2R会略微降低应用启动速度,但能彻底解决这类重复文件问题。
3. 升级Windows App SDK版本
当前使用的Microsoft.WindowsAppSDK 1.2.221109.1可能存在WebView2打包的已知bug,尝试升级到最新稳定版:
- 打开NuGet包管理器,找到
Microsoft.WindowsAppSDK - 选择更新到最新稳定版本
- 清理解决方案(菜单:生成>清理解决方案),重新生成后再打包
4. 清理缓存目录
手动删除项目根目录下的obj和bin文件夹,清理编译缓存后,重新生成项目再尝试打包。
内容的提问来源于stack exchange,提问作者McTwitch

