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

如何将需直接引用的测试包归集到通用测试工具包以支持VS测试检测?

解决方法:将测试依赖归集到通用工具包的实现方案

核心思路就是用MSBuild的.props和.targets文件统一注入依赖,完全符合vstest评论提到的方案,既能实现DRY原则,又能满足Visual Studio测试运行器对Microsoft.NET.Test.Sdk的直接引用要求。

1. 为通用测试工具包创建MSBuild配置文件

在你的通用测试工具包项目中,新建build目录,添加两个文件:

  • Your.Test.Toolkit.props:用来统一定义所有测试依赖的包引用
  • Your.Test.Toolkit.targets:(可选)用于添加额外构建逻辑

在.props文件中按如下配置,处理Microsoft.NET.Test.Sdk的特殊要求,同时配置PrivateAssets和IncludeAssets避免依赖传递:

<Project>
  <ItemGroup>
    <!-- 注入Microsoft.NET.Test.Sdk,等同于项目直接引用,满足测试运行器检测要求 -->
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <!-- 其他第三方测试组件,统一归集到这里 -->
    <PackageReference Include="xunit" Version="2.6.6">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="coverlet.collector" Version="6.0.0">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>
</Project>

2. 配置通用工具包的NuGet打包规则

在通用工具包的.csproj中,确保build目录下的配置文件被打包到NuGet中:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>Your.Test.Toolkit</PackageId>
    <Version>1.0.0</Version>
    <IncludeBuildOutput>false</IncludeBuildOutput>
  </PropertyGroup>

  <ItemGroup>
    <None Include="build\**" Pack="true" PackagePath="build" />
  </ItemGroup>
</Project>

3. 测试项目仅需引用通用工具包

所有测试项目无需再单独添加Microsoft.NET.Test.Sdk或其他测试组件的引用,只需要添加通用工具包的引用即可:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Your.Test.Toolkit" Version="1.0.0" />
  </ItemGroup>
</Project>

方案原理说明

  • Visual Studio测试运行器会识别通过MSBuild props注入的Microsoft.NET.Test.Sdk引用,因为props文件会在项目加载阶段被自动导入,效果等同于项目直接声明该引用。
  • PrivateAssets="all"配置确保这些依赖不会传递到引用测试项目的其他项目中,和直接在测试项目中设置的效果完全一致。
  • 所有测试项目仅需维护通用工具包的引用,后续更新依赖版本或新增组件,只需修改通用工具包的props文件即可,完全符合DRY原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:35:15