如何在Visual Studio中排除测试项目出现在启动项目选择器中?
当测试项目被添加到包含控制台或Web应用项目的解决方案中时,测试项目会出现在启动项目下拉菜单里。首次打开Visual Studio时,测试项目甚至可能被默认选为启动项目,若存在大量测试项目,会难以快速找到并选择实际需要的启动项目。
使用环境:Visual Studio 2022、.NET 6、MSTest测试项目。示例解决方案包含ASP.NET Core Web API、MSTest测试项目和类库,其中WebApplication和TestProject会出现在启动项目选择器中,但ClassLibrary不会。
尝试过的无效操作:将测试项目的输出类型改为类库,在Visual Studio项目属性视图中修改时选择会立即变回控制台应用程序;即使手动添加<OutputType>Library</OutputType>到项目文件,测试项目仍会出现在启动项目下拉菜单中。
在MSTest测试项目的.csproj文件中添加<IsLaunchable>false</IsLaunchable>属性,即可让测试项目不再显示在启动项目下拉菜单中。
修改后的TestProject.csproj示例代码:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IsPackable>false</IsPackable> <!-- 添加此属性以隐藏测试项目的启动选项 --> <IsLaunchable>false</IsLaunchable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" /> <PackageReference Include="MSTest.TestAdapter" Version="2.2.10" /> <PackageReference Include="MSTest.TestFramework" Version="2.2.10" /> <PackageReference Include="coverlet.collector" Version="3.1.2" /> </ItemGroup> </Project>
原理说明
<IsLaunchable>是.NET SDK提供的属性,用于明确标记项目是否为可直接启动的应用程序。测试项目的执行依赖测试运行器,而非直接启动,因此将该属性设置为false后,Visual Studio会自动将其从启动项目选项中排除。
之前修改<OutputType>无效,是因为Microsoft.NET.Test.Sdk包会隐式配置测试项目的启动相关属性,而<IsLaunchable>是专门控制启动项目可见性的优先级属性,能覆盖这种隐式配置。
内容的提问来源于stack exchange,提问作者Ryan Pattillo

