如何在C#和.NET CLI生产构建时避免下载单元测试库
在C#/.NET生产构建中跳过单元测试库下载的正确方式
方法1:通过条件包引用精准控制
在主项目(比如Api.csproj)里,给所有单元测试相关的包引用加上条件,只在Debug或测试专属配置下加载:
<!-- 仅在Debug配置或指定IsTestBuild为true时引入测试依赖 --> <PackageReference Include="xunit" Version="2.6.6" Condition="'$(Configuration)' == 'Debug' Or '$(IsTestBuild)' == 'true'" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.5.5" Condition="'$(Configuration)' == 'Debug' Or '$(IsTestBuild)' == 'true'" PrivateAssets="all" />
生产构建时,直接用Release配置(默认不会触发Debug的条件),或者显式关闭测试依赖开关:
# 用Release配置构建 dotnet build --configuration Release # 或显式设置属性排除测试依赖 dotnet build /p:IsTestBuild=false
这样生产构建过程就不会下载和打包测试相关的库。
方法2:优化拆分项目的临时方案
你拆分主项目和测试项目的思路没问题,自定义任务无法指定测试项目的问题,大概率是任务定义的问题,调整一下即可:
- 在
test/Api.Test.csproj里正确定义自定义任务:
<Target Name="DisplayMessages" AfterTargets="Build"> <Message Text="测试项目自定义任务执行中" Importance="High" /> </Target>
- 执行任务时直接指定测试项目路径,之前的命令本身是有效的,确认路径和任务名称无误即可:
dotnet msbuild -target:DisplayMessages --project test/Api.Test.csproj
额外技巧:减少冗余操作
生产构建时如果已经提前还原过依赖,可以加上--no-restore参数加快构建速度;用dotnet publish生成发布包时,默认会自动排除测试依赖:
dotnet publish --configuration Release --no-restore
内容的提问来源于stack exchange,提问作者JRichardsz
相关产品推荐
相关产品推荐

