Adds our own hook for before/after logic that's more usable, called
`ITestMethodLifecycle`. This provides access to a context object
including the information about the test and the output helper. This can
be implemented by attributes or by the class itself.
The goal (and result) of this, is that we have a single *test executor*
extensibility point that provides all of the features we need. We should
use this everywhere we need features xUnit doesn't have.
Adding a new extensibility point (`ITestMethodLifecycle`) allows us to
do this without turning all of these features into a giant monolith.
---
Also updated our existing extensibility to use this new hook.
I did as much cleanup as a could to remove duplication from logging and
keep it loosly coupled. I didn't want to tease this apart completely
because the scope of this PR is already pretty large.
* Use Arcade's convention for setting IsPackable (must be explicitly set)
* Use Arcade conventions for using DebugType and eng/Versions.props
* Remove dead code
* Update restore feeds in daily builds.md
* Disable UsingToolNetFrameworkReferenceAssemblies in analyzer tests
* Remove usage of TestGroupName (an obsolete KoreBuild setting)
* Use IVT as a .csproj attribute
* Remove obsolete targets, properties, and scripts
* Replace IsProductComponent with IsShipping
* Undo bad merge to version.props
* Update documentation, and put workarounds into a common file
* Replace usages of RepositoryRoot with RepoRoot
* Remove API baselines
* Remove unnecessary restore feeds and split workarounds into two files
* Enable PR checks on all branches, and disable autocancel
.NET Core 2.0 reached EOL last year. This removes multi-targeting our test projects and test assets to only use .NET Core 2.1 and .NET Framework 4.6.1.
Addresses #571
Using `TaskCreationOptions.LongRunning` creates a dedicated thread, but
it's released on the first await. Using Task.Run uses the thread pool
instead