使用Visual Studio 2017和Dotnet Core 2.0 SDK我有一个包含多个项目的解决方案。其中一些是测试项目,一些是源项目。
我可以在根解决方案方向上运行dotnet test
,它会尝试在解决方案的所有项目中发现测试。
但是,源项目没有测试,因此会显示错误。测试全部运行并通过,除了进程的退出代码为1.这意味着我们的CI构建失败。
有没有办法让它只运行在解决方案的测试项目上?它们位于测试目录中,包括文件系统和解决方案目录,但我找不到任何方法来过滤它们。
我编写了一个Powershell脚本来为测试文件夹中的每个项目运行它,但是我们的CI服务器使用Linux和Docker镜像microsoft/dotnet:2.0-sdk,因此Powershell脚本不会在那里运行。
我可以用Bash写它,但后来它不能在Windows上运行。
我必须为具有dotnet和powershell的构建制作自定义docker镜像的唯一其他想法。
答案 0 :(得分:3)
这是一个没有修复的已知问题。问题中列出了一些解决方法:https://github.com/Microsoft/vstest/issues/411
答案 1 :(得分:2)
好消息,到目前为止,.NET Core 2.2已修复此问题。提交:https://github.com/Microsoft/vstest/pull/1745
答案 2 :(得分:1)
如果我们在谈论dotnet test
,这是相关问题:
https://github.com/microsoft/vstest/issues/1129
有a comment提出了解决方法:
在与解决方案相同的目录中添加Directory.Build.targets
文件,其中包含:
<Project>
<Target Name="VSTestIfTestProject">
<CallTarget Targets="VSTest" Condition="'$(IsTestProject)' == 'true'" />
</Target>
</Project>
还要在同一目录中添加一个after.[YourSolution].sln.targets
文件,将名称中的[YourSolution]
替换为您的实际解决方案名称,其中包含:
<Project>
<Target Name="VSTest">
<MSBuild Projects="@(ProjectReference)" Targets="VSTestIfTestProject" />
</Target>
</Project>
在a later comment中,他提到自己blogged the details of how this works。