UWP MSTest项目引用主应用编译报错:Payload含重复目标路径文件
解决UWP MSTest项目构建时的Payload文件冲突问题
我来帮你搞定这个UWP MSTest项目的构建冲突问题,针对你遇到的两种不同冲突场景,分别给出具体的解决步骤:
一、Newtonsoft.Json.dll 版本冲突
这个问题的根源是TestPlatform.Universal SDK自带了旧版本的Newtonsoft.Json,而你的项目又通过NuGet引入了另一个版本,打包时两个DLL撞车了。你可以试试这两种方法:
- 方法1:强制使用NuGet版本:在测试项目(App.Test)的NuGet包管理器中,安装和主应用完全相同版本的Newtonsoft.Json(也就是你这里的11.0.1-beta1)。这样MSBuild会自动优先使用NuGet拉取的版本,把SDK自带的旧版本排除出打包列表。
- 方法2:手动排除冲突DLL:如果NuGet的方式没生效,直接编辑测试项目的
.csproj文件,添加以下代码,明确指定使用NuGet的DLL,并排除SDK里的版本:
<ItemGroup> <ExcludeAssetsFromDeployment Include="Newtonsoft.Json.dll" /> <Reference Include="Newtonsoft.Json"> <HintPath>$(NuGetPackageRoot)newtonsoft.json\11.0.1-beta1\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference> </ItemGroup>
二、Assets目录下的图片文件冲突
这种情况是因为测试项目引用主应用后,主应用的Assets资源会被自动纳入测试项目的打包Payload,而测试项目自己也有同名的图片,哪怕你设置了“复制到本地”为“Do not copy”也没用——UWP的打包机制会自动包含引用项目的资源。解决办法选一个就行:
- 方法1:删除重复文件:直接删掉测试项目里和主应用同名的Assets图片(比如
Wide310x150Logo.scale-200.png),测试项目可以直接复用主应用的资源,没必要重复存一份。 - 方法2:排除主应用的资源:如果你需要保留测试项目自己的图片,编辑测试项目的
.csproj文件,添加以下规则,把主应用的同名图片排除出打包范围:
<ItemGroup> <!-- 排除主应用传来的同名图片 --> <Content Remove="Assets\Wide310x150Logo.scale-200.png" /> <!-- 确保测试项目自己的图片不会被误处理 --> <None Include="Assets\Wide310x150Logo.scale-200.png"> <CopyToOutputDirectory>Never</CopyToOutputDirectory> </None> </ItemGroup>
另外,右键测试项目里的主应用引用,查看“属性”,把“复制本地”设为False,进一步避免资源被重复复制。
最后再试个兜底操作
如果上面的方法都没解决问题,试试清理构建缓存:删掉测试项目和主应用的bin、obj目录,然后重新构建整个解决方案——有时候缓存里的旧文件也会搞出这种冲突。
内容的提问来源于stack exchange,提问作者ATL_DEV
相关产品推荐
相关产品推荐

