MSTest + 多个框架目标 = 悲伤

MSTest + Multiple Framework Targets = sadness

我有一些 MSTest 项目需要同时针对 netcoreapp1.1 以及更新的内容,例如 netcoreapp3.0

我已经尝试了以下建议的大部分内容:

https://www.meziantou.net/mstest-v2-testing-against-multiple-frameworks.htm

How to properly unit test a .NET project with multiple target frameworks, given implementation differences among targets?

https://developercommunity.visualstudio.com/content/problem/215235/test-container-not-found-when-trying-to-run-tests.html

然而我的结果总是:

StreamJsonRpc.RemoteInvocationException: The following TestContainer was not found 'C:\Projects\fact\collection\src\Fact.Extensions.Collection.Tests\bin\Debug\netcoreapp1.1\Fact.Extensions.Collection.Tests.dll'
   at StreamJsonRpc.JsonRpc.<InvokeCoreAsync>d__96`1.MoveNext()

在写这个问题时,我推断最新的 Microsoft.NET.Test.Sdk(撰写本文时为 16.4.0)可能与以前的框架不兼容。我通过以下两个测试了这个理论:

  • 有条件地为 netcoreapp1.1 ItemGroup+PackageReference
  • 指定 15.3.0
  • netcoreapp2.0 个目标之一回滚到 16.3.0

执行此操作后:

  • dotnet test 找到了几乎所有的东西,但仍然没有找到 16.3.0 + netcoreapp2.0 目标。这似乎可以通过进一步退回到 16.2.0 来纠正,因为 Microsoft.TestPlafrom.TestHost 16.3.0 有一个 netcoreapp2.1 要求
  • VS2019 仍然有投诉,但能够找到 15.3.016.3.0 Microsoft.NET.Test.Sdk 引用的项目

这与 Bruno Garcia 在开发者社区 link 中的发现一致。我不考虑回滚解决方案,而是考虑解决方法。通过使用条件按 TargetFramework 进行过滤,我对这种解决方法感觉更好。

来自 Visual Studio 的更多警告会很有帮助,确实是版本依赖性问题导致了问题。如果您仔细观察,dotnet test 确实在该方面提供了一些反馈。