Visual Studio 2022发布.NET7项目时如何排除CodeCoverage文件夹?
解决.NET 7发布时自动生成CodeCoverage文件夹的问题
问题描述
我拥有一个包含单元测试项目的.NET 7解决方案,使用Visual Studio 2022发布项目时,输出目录中自动生成了不需要的CodeCoverage文件夹。尝试通过移除Content项来排除它,但并未成功。
发布输出:
测试项目结构
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <IsPackable>false</IsPackable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" /> <PackageReference Include="Moq" Version="4.18.4" /> <PackageReference Include="xunit" Version="2.4.2" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.5"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> </ItemGroup> </Project>
服务项目结构
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <startupobject>CService.Program</startupobject> </PropertyGroup> <ItemGroup> <PackageReference Include="AutoMapper" Version="12.0.1" /> <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" /> <PackageReference Include="FluentValidation" Version="11.5.2" /> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.8" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.8" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.8" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> <PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="5.3.0" /> <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.8" /> <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\C.Business.csproj" /> <ProjectReference Include="..\C.Common.csproj" /> <ProjectReference Include="..\C.Middlewares.csproj" /> <ProjectReference Include="..\C.Repository.csproj" /> </ItemGroup> <ItemGroup> <Content Update="log4netDev.config"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Update="log4netProd.config"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup> <ItemGroup> <Content Remove="CodeCoverage\**" /> <Content Remove="CodeCoverage" /> </ItemGroup> </Project>
解决步骤
1. 移除服务项目中不必要的测试SDK引用
服务项目无需依赖Microsoft.NET.Test.Sdk包(该包仅用于单元测试项目),直接删除服务项目中对应的PackageReference:
<!-- 从服务项目的ItemGroup中删除此行 --> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" />
这是导致CodeCoverage文件夹随发布输出的核心原因之一。
2. 添加发布排除配置(可选,若移除包后仍有问题)
在服务项目的<PropertyGroup>中添加以下配置,强制排除测试相关目录和资产:
<PropertyGroup> <!-- 保留原有配置 --> <TargetFramework>net7.0</TargetFramework> <startupobject>CService.Program</startupobject> <!-- 添加以下两行 --> <ExcludeTestAssetsFromPublish>true</ExcludeTestAssetsFromPublish> <PublishItemsToExclude>$(PublishItemsToExclude);CodeCoverage\**;CodeCoverage</PublishItemsToExclude> </PropertyGroup>
3. 清理并重新发布
- 右键解决方案,选择清理解决方案
- 右键服务项目,选择重新生成
- 重新执行发布操作,检查输出目录是否已移除CodeCoverage文件夹
额外检查
确保在Visual Studio的发布配置中,未将测试项目的输出包含在发布范围内:
- 打开服务项目的发布配置文件(
.pubxml) - 确认没有包含测试项目的
<ProjectReference>或额外的文件引用
内容的提问来源于stack exchange,提问作者Sahil Sharma
相关产品推荐
相关产品推荐

