You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对包含UWP与.NET Core/.NET 6测试项目的解决方案执行dotnet test?

问题根因

你遇到的报错属于dotnet CLI的原生设计限制,并非配置遗漏:

  • dotnet CLI 自带的是跨平台版本的MSBuild,仅包含.NET Core/.NET 5+/NET Standard相关的构建目标文件,不包含UWP项目依赖的Microsoft.Windows.UI.Xaml.CSharp.targets这类Windows平台专属的构建组件
  • UWP的构建目标仅随Visual Studio的「通用Windows平台开发」工作负载安装,存放在Visual Studio的安装目录下,dotnet CLI执行时只会在自身的SDK目录下查找构建目标,因此会抛出MSB4019错误。
统一构建测试的可行方案

方案1:全流程使用MSBuild + VSTest.Console(推荐)

全功能版MSBuild(随Visual Studio安装,可通过Developer Command Prompt for VS直接调用)兼容所有项目类型,不需要拆分命令:

  • 还原解决方案所有项目依赖:
    msbuild 你的解决方案.sln /t:Restore /p:Configuration=Release /p:Platform=x64

注意:UWP项目不支持AnyCPU架构,必须明确指定x86/x64/ARM等具体架构参数

  • 构建所有项目:
    msbuild 你的解决方案.sln /t:Build /p:Configuration=Release /p:Platform=x64 /p:AppxPackageSigningEnabled=false

不需要对UWP项目做应用包签名的场景可添加AppxPackageSigningEnabled=false参数,避免签名报错

  • 统一执行所有测试:
    vstest.console.exe **\*Test.dll **\*Test.appx /Platform:x64 /InIsolation

该命令可同时识别.NET 单元测试dll和UWP测试包appx,一次跑完所有测试用例

方案2:配置UWP项目自动跳过dotnet CLI构建

如果需要保留dotnet CLI处理非UWP项目的流程,可以在所有UWP项目的.csproj文件中添加运行时判断逻辑,让dotnet CLI执行时自动跳过UWP项目:
在UWP项目文件的首行PropertyGroup节点下添加如下配置:

<PropertyGroup>
  <!-- dotnet CLI运行时MSBuildRuntimeType为Core,此时标记当前项目不参与测试、不编译 -->
  <IsTestProject Condition="'$(MSBuildRuntimeType)' == 'Core'">false</IsTestProject>
  <EnableDefaultCompileItems Condition="'$(MSBuildRuntimeType)' == 'Core'">false</EnableDefaultCompileItems>
</PropertyGroup>
<!-- 仅在非dotnet CLI运行时导入UWP专属构建目标 -->
<Import Project="$(MicrosoftWindowsXamlSdkPath)Microsoft.Windows.UI.Xaml.CSharp.targets" Condition="'$(MSBuildRuntimeType)' != 'Core'" />

配置完成后执行dotnet build/dotnet test只会处理.NET Standard/.NET Core/.NET 6的项目,不会触发UWP项目的构建报错,UWP项目的构建测试单独用MSBuild和VSTest.Console执行即可。

内容的提问来源于stack exchange,提问作者Aron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:45:04