Upgraded (most) collections to utilize more suitable replacements from J2N (LUCENENET-616)

Squashed commit of the following:

commit 0090923917ce9a3e1a0a557030de511c01bd15e0
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 20:24:26 2020 +0700

    Lucene.Net.Tests.Support.TestApiConsistency: Updated ignore list

commit d8400740e9d3914a1044d2a4db775d7f80d619e7
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 13:16:04 2020 +0700

    Fixed some broken XML documentation links

commit 1c5fc49856bcaaca0b60d34177564ac5e070aa6f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 12:43:16 2020 +0700

    Upgraded J2N to 2.0.0-beta-0001, ICU4N to 60.1.0-alpha.197, and Morfologik.Stemming to 2.1.6-beta-0002

commit 15ce25ecf8a4d1f3605233ea06a6d3c16a9cbd77
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 12:43:32 2020 +0700

    Deleted NuGet.config

commit a47b2b5daae0c4de10ce9c118556801986ac309f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 09:12:43 2020 +0700

    Lucene.Net.Index.IndexReader: Replaced ConcurrentSet with ConcurrentHashSet on parentReaders

commit b720cf9ef567167243606b7f421bf174d7694d92
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 08:39:41 2020 +0700

    Lucene.Net.Search.ReferenceManager: Replaced ConcurrentSet with ConcurrentHashSet on refreshListeners

commit 16b9e6e007268b181aa17d4a9585456091f6c31f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 08:27:12 2020 +0700

    Lucene.Net.Util.VirtualMethod: Replaced ConcurrentSet with ConcurrentHashSet on singletonSet

commit d4492ea98c6021f976759f2414a55be92045f071
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 08:24:01 2020 +0700

    Lucene.Net.TestFramework.Index.ThreadedIndexingAndSearchingTestCase: Changed ConcurrrentSet to ConcurrentHashSet. Also fixed a bug with the ConcurrentQueue not actually being populated because it was not being passed through to the thread that was populating it.

commit 8a9c6a6973cdcadc168226446707b08e60f2fbf1
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 08:04:14 2020 +0700

    Lucene.Net.TestFramework.Store.MockDirectoryWrappper: Changed openLocks to use ConcurrentHashSet instead of ConcurrentSet

commit 88f5052e2a6fb17dc864052c5791b2f5956be80f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 07:47:45 2020 +0700

    Lucene.Net.Support.ConcurrentHashSet: Implemented ISet<T> (partially)

commit 5d351d7192e608084ed59b685927e63c14da121c
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 07:30:06 2020 +0700

    Lucene.Net.Support: Added ConcurrentHashSet

commit 6197416735bca9552bbb956adf0d3b8fcb434455
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 06:36:18 2020 +0700

    Lucene.Net.Support.Collections: Removed unused (and only partially implemented) NewSetFromMap method and related SetFromMap class

commit 5e65d5e262403d9a0a77da692770471d7f61c558
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 06:34:17 2020 +0700

    Lucene.Net.Support.Collections: Factored out Singleton() method and used collection initializers instead

commit aef40f1e50145ec5973cfbe0474dbbf99f486089
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 06:08:56 2020 +0700

    Lucene.Net.Support.Collections: Factored out ImplementsGenericInterface() in favor of J2N's implementation

commit 6c13b7a87fcfd5091636ee8e6e2f809ba513551f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 05:54:54 2020 +0700

    Upgraded Morfologik.Stemming to 2.1.6-beta-0004-gf258be02f5

commit 59d56680fe1f6655bbf85cd395c49796a7a8b866
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 05:54:13 2020 +0700

    NuGet.config: Added Morfologik.Stemming preview feed

commit 48b0431e7bd231215eca360af8f6af6a0dabd782
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 04:08:58 2020 +0700

    SWEEP: Upgraded to account for breaking changes (AsCharSequence() and BitOperation) in J2N.

commit 32d89bbd31432572463b5eb4b509711825e3f45b
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 04:01:07 2020 +0700

    Upgraded J2N to 1.0.0-ci-0032-g1028fef3c2 and ICU4N to 60.1.0-alpha.203+513cf990e6

commit 1c28e683f787d21191bc08e37f3535d4ebeb7489
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 23 03:43:21 2020 +0700

    Lucene.Net.Support: Renamed ExceptionToNullableEnumConvention > ExceptionToNullableEnumConventionAttribute

commit 8ecaf7642a07fa7f9bce10e00830e2a93da533e4
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Wed Jan 22 13:30:53 2020 +0700

    BREAKING: Changed semantics of CharTermAttribute's Append() overloads to act more like the .NET StringBuilder class.

    1) The 3rd parameter was changed from an exclusive end index to a count.
    2) A null parameter on a single parameter overload will be a no-op instead of appending the text "null".
    3. A null parameter on a 3 parameter overload will be a no-op if both startIndex and count are 0, otherwise it will throw an ArgumentNullException.

commit 250ccb3fae32c4fee4891db37d13bf710cd1b89b
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Wed Jan 22 10:01:40 2020 +0700

    SWEEP: Fixed using statements and whitespace in ~100 files

commit b733c4d158e5e1de62c6b12797c589ac70b4c1c7
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Wed Jan 22 00:09:19 2020 +0700

    BREAKING: Factored out Character, ICharSequence, StringBuilderCharSequenceWrapper, StringBuilderExtensions, StringCharSequenceWrapper, and most StringExtensions methods in favor of J2N's implementation

commit 236ebeaeb2b187c15b83fbf9707df883927be799
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Tue Jan 21 17:39:38 2020 +0700

    Lucene.Net.Search.FieldComparer: Replaced CompareTo() calls with JCG.Comparer<T>.Default.Compare(), factoring out Lucene.Net.Support.SignedZeroComparer in the process.

commit 0dd5d40c2584b5a124d27e892a994ead20495a58
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Tue Jan 21 04:41:51 2020 +0700

    Lucene.Net.Support: Factored out GeneralKeyedCollection and AttributeItem in favor of J2N.Collections.Generic.LinkedDictionary

commit 9d65cc71f7fef8b4712b0181d92dd3ecea0f7ebf
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Tue Jan 21 04:01:57 2020 +0700

    Lucene.Net.Support: Refactored ConcurrentHashSet into ConcurrentSet - a wrapper class that can be used to synchronize any set object (ordered or not), similar to how it was done in Java. Changed ordered concurrent set types back to the original type from Lucene.

commit 20ce72dd26d6d60a5c507c44242812a7dcf4b1b4
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Mon Jan 20 15:15:21 2020 +0700

    Lucene.Net.TestFramework.Search.AssertingScorer: Changed to use ConditionalWeakTable/WeakDictionary

commit 7a68b17a4d154b0d42130c0c12ba42d2b7fbd53b
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Mon Jan 20 05:40:17 2020 +0700

    Lucene.Net.Support.PriorityQueue: Factored out in favor of J2N's implementation

commit 78f96bee8a3c2bf207f4445df85ed3111af9b797
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Mon Jan 20 05:15:21 2020 +0700

    Lucene.Net.Support: Factored out TreeSet and TreeDictionary and deleted all related files

commit 9c39edfb1b60538e1797d49d6e8f24d52e77409e
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Mon Jan 20 04:28:15 2020 +0700

    Lucene.Net.Grouping.AbstractGroupingFacetCollector + Lucene.Net.Highlighter.PostingsHighlight.PostingsHighlighter + Lucene.Net.TestFramework.Analysis.MockCharFilter: Factored out TreeSet and TreeDictionary from Lucene.Net.Support in favor of J2N.Collections.Generic.SortedSet and J2N.Collections.Generic.SortedDictionary

commit 902c5a0953e4a10eb7f4e96138b09372387f9575
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Mon Jan 20 03:26:44 2020 +0700

    Upgraded to J2N 1.0.0-ci-0028-gdf6487f0d2 and ICU4N 60.1.0-alpha.200.g70c0d4d663

commit 107960688cee080b4efaa3eb4d1b96f664f62582
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sat Jan 18 03:52:28 2020 +0700

    Lucene.Net.TestFramework.Support.JavaCompatibility.LuceneTestCase: Replaced SetEquals(expected, actual) call with J2N.Collections.Generic.SetEqualityComparer<T>.Aggressive.Equals(expected, actual)

commit 3b2ab0bb7248d35cbd8aac65033ef4368a1b8887
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sat Jan 18 01:36:26 2020 +0700

    Lucene.Net.Support: Factored out IdentityComparer, IdentityHashMap, and IdentityHashSet and used J2N.Runtime.CompilerServices.IdentityEqualityComparer in conjunction with standard Dictionary and HashSet types

commit 5709d717ecbf58a557892c7e6fe164766eaff42b
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 17 23:07:03 2020 +0700

    Updated J2N to 60.1.0-alpha.198.g994ea3e2aa and ICU4N to 60.1.0-alpha.199.ga45db812af

commit d9e7c033ec0748dbb716c9f6f065061c5d1370e8
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 17 06:29:33 2020 +0700

    Lucene.Net.Support.Collections: Factored out Swap and Shuffle in favor of J2N's implementation

commit a8d8f477d97d35eba99e40c5d64502ee8db1ebe4
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 17 06:07:48 2020 +0700

    Lucene.Net.Collections: Factored out unmodifiable methods and related classes in favor of J2N's AsReadOnly() extension methods

commit aed4d994fff776c1111abda33ee8fe6b6802edfd
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 17 05:48:19 2020 +0700

    Lucene.Net.Support: Removed Equatable, EquatableList, EquatableSet, and ToString/GetHashCode methods from Collections

commit 5582ddbe20a05dc67f0f6ecf1bd330eca753bd44
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 16 19:44:16 2020 +0700

    Lucene.Net.Util.Fst: Use J2N.Collections.List<T> for the closing type of Outputs<T> to ensure the outputs can be compared for structural equality

commit eb790619636ff208f8d21efac845fa4539a06d01
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 16 18:36:39 2020 +0700

    Lucene.Net.Util.Fst.ListOfOutputs::Merge(): Streamlined so we don't have so many casts

commit 74d9fc227940baec451bc3b02b3d06621100105c
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Thu Jan 16 11:55:08 2020 +0700

    Updated J2N and ICU4N to latest preview versions

commit 89bc2118b2dc1c3c79a344c099fb78b2daac946c
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sun Jan 12 10:27:56 2020 +0700

    Removed FEATURE_HASHSET_CAPACITY, since J2N now has the full .NET Core 3.x implementation with a capacity constructor

commit 958cdf3c82f862664407ccef02ca2ca8fd10bf2a
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sun Jan 12 10:14:27 2020 +0700

    SWEEP: Removed dependencies on Collections.Equals() and Collections.GetHashCode()

commit 841d0d4f0e6e5ec62d8c8c4b53a7135c668def2a
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sun Jan 12 09:42:17 2020 +0700

    SWEEP: Lucene.Net.Support: Removed dependencies on Equatable, EquatableList, and EquatableSet, and replaced with collections from J2N

commit 6e3c3c533f299995deacc1dce7362fc20ca7a03f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sun Jan 12 09:03:32 2020 +0700

    Upgraded to J2N 1.0.0-ci-0012-ga65c37c253

commit d80e9dda73de4f9c6b1a01902f211bf17dcf1536
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sat Jan 11 02:33:28 2020 +0700

    SWEEP: Swapped in structural equality comparers from J2N in place of Collections.ToString() and Collections.GetHashCode() from Lucene.Net.Support

commit 1af3d46b5791cbfc0246baad54cdd2112d084fc4
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Sat Jan 11 02:28:31 2020 +0700

    Added naming exclusion for _Scratch class (which only exists to make a J2N namespace real for now)

commit de3e0a10d7ef7274e33f3fb69303b8bef67b29d7
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 22:38:07 2020 +0700

    SWEEP: Factored out Arrays.AsList, which was causing both additional operational complexity and unnecessary memory allocations

commit e1ead061df6ab5371979040ae8071b1bf8b18070
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 18:37:03 2020 +0700

    Lucene.Net.Util.Automaton.State: Implemented IEquatable<State>, changed enumerator to a struct

commit 6c16c48bf000f2f075aa680f89b4e15fdace70e6
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 18:22:53 2020 +0700

    Lucene.Net.Support.ConcurrentHashSet: Implemented IStructuralEquatable and IFormattable

commit ea81d7952f1b90030f7c78948a5c82e5b073bf46
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 18:16:46 2020 +0700

    SWEEP: Swapped out System.Collections.Generic.HashSet for J2N.Collections.Generic.HashSet

commit 5d455451aef3c0144997b19fe952db92da81eb61
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 13:33:03 2020 +0700

    Formatting and documentation updates

commit f3b4160f7d823fdf1cbf7810317197070b6678aa
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 07:00:57 2020 +0700

    SWEEP: Factored out C5's TreeSet, where possible.

commit e8103d1c5eeab5ebeca80404e0887796d392a44c
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 06:40:59 2020 +0700

    SWEEP: Changed System.Collections.Generic.SortedSet to J2N.Collections.Generic.SortedSet

commit a5325d0d9421e479bfda426cc3a519ce25df3e54
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 06:15:50 2020 +0700

    Lucene.Net.Analysis.Kuromoji.Dict.UserDictionary: Swapped out C5 TreeDictionary for J2N.Collections.Generic.SortedDictionary

commit 309d4ebd2ae109e45792090e61a00833e5b4ee4f
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 06:06:40 2020 +0700

    SWEEP: Factored out System.Collections.Generic.SortedDictionary in favor of J2N.Collections.Generic.SortedDictionary

commit fd03a03a6b878f04007ce398616ef045cf899f8a
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 05:30:08 2020 +0700

    SWEEP: Factored out Lucene.Net.Support.HashMap in favor of J2N.Collections.Generic.Dictionary

commit c06f34e6001e83d057bc7f3f25e5bc4bf04d9c0a
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 04:31:58 2020 +0700

    Lucene.Net.Highlighter, Lucene.Net.Tests.Spatial: Swapped in LinkedHashSet from J2N, like in the original Lucene implementation

commit d6a10e95c42a1c542920caabd609fde71a417ad8
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 04:30:15 2020 +0700

    Lucene.Net.Tests.Search.TestFieldCache::Test(): Simplified expression with LINQ query

commit 8c11b73f6b61eb45e7e5ece1d016af87b9b97c8d
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 03:49:42 2020 +0700

    SWEEP: Factored out LinkedHashMap in favor of J2N's LinkedDictionary

commit 659f94f0b8b16c961a3ff18e4d1bd53f7aa65865
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 03:47:25 2020 +0700

    Upgraded J2N to 1.0.0-ci-0001-g4f977e960e

commit fd2c3249ee66a2fadd62f243dfbb9c59751f08c5
Author: Shad Storhaug <shad@shadstorhaug.com>
Date:   Fri Jan 10 03:46:47 2020 +0700

    Added NuGet.config to import J2N preview feed on MyGet
650 files changed
tree: 31ab8eccc4f31ffb554e035b0dde5b5aad37a08e
  1. .vscode/
  2. branding/
  3. build/
  4. lib/
  5. src/
  6. websites/
  7. .gitattributes
  8. .gitignore
  9. .rat-excludes
  10. ACKNOWLEDGEMENTS.txt
  11. azure-pipelines.yml
  12. build.bat
  13. CHANGES.txt
  14. CONTRIBUTING.md
  15. Directory.Build.props
  16. Directory.Build.targets
  17. global.json
  18. LICENSE.txt
  19. Lucene.Net.sln
  20. Lucene.Net.snk
  21. NOTICE.txt
  22. README.md
  23. TestTargetFramework.props
README.md

Apache Lucene.Net

Full-text search for .NET

Apache Lucene.Net is a .NET full-text search engine framework, a C# port of the popular Apache Lucene project. Apache Lucene.Net is not a complete application, but rather a code library and API that can easily be used to add search capabilities to applications.

The Apache Lucene.Net web site is at: http://lucenenet.apache.org

Supported Frameworks

Lucene.Net 3.0.3

  • .NET Framework 4.0
  • .NET Framework 3.5

Lucene.Net 4.8.0

Status

Latest Stable Version: Lucene.Net 3.0.3

Working toward Lucene.Net 4.8.0 (currently in BETA)

Download

Lucene.Net 3.0.3

Core Library

NuGet version

PM> Install-Package Lucene.Net
All Packages

Lucene.Net 4.8.0

Core Library

NuGet version

PM> Install-Package Lucene.Net -Pre
All Packages

Documentation

We now have some preliminary documentation for Lucene.Net 4.8.0 on the Lucene.Net Website.

The API is similar to Java Lucene 4.8.0, which you may also find helpful to review.

NOTE: We are working on fixing issues with the documentation, but could use more help since it is a massive project. See #206.

Legacy Versions

Demos & Tools

There are several demos implemented as simple console applications that can be copied and pasted into Visual Studio or compiled on the command line in the Lucene.Net.Demo project.

There is also a dotnet command line tool available on NuGet. It contains all of the demos as well as tools maintaining your Lucene.Net index, featuring operations such as splitting, merging, listing segment info, fixing, deleting segments, upgrading, etc. Always be sure to back up your index before running any commands against it!

dotnet tool install lucene-cli -g --version 4.8.0-beta00007

Once installed, you can explore the commands and options that are available by entering the command lucene.

lucene-cli Documentation

How to Contribute

Lucene.Net is a very large project (over 400,000 executable lines of code and nearly 1,000,000 lines of text total) and we welcome any and all help to maintain such an effort. Read our Contribution Guide or read on for ways that you can help.

Join Mailing Lists

How to Join Mailing Lists

Ask a Question

If you have a general how-to question or need help from the Lucene.Net community, please email the Apache Lucene.Net-User mailing list by sending a message to:

user@lucenenet.apache.org

We recommend you join the user mailing list to stay looped into all user discussions.

Alternatively, you can get help via StackOverflow.

Please do not submit general how-to questions to JIRA, use JIRA for bug reports/tasks only.

Report a Bug

To report a bug, please use the JIRA issue tracker. You can signup for a JIRA account here (it just takes a minute).

Start a Discussion

To start a development discussion regarding technical features of Lucene.Net, please email the Apache Lucene.Net-Developer mailing list by sending a message to:

dev@lucenenet.apache.org

We recommend you join both the user and dev mailing lists to stay looped in to all user and developer discussions.

Submit a Pull Request

Before you start working on a pull request, please read our Contributing guide.

If you plan to submit multiple pull requests, please submit an Individual Contributor License, or for individual pull requests, just submit the request and in the description state that the code is your original work and you license it under the Apache License v2.

Building and Testing

Command Line

Building on the Command Line is currently only supported on Windows.

Prerequisites
  1. Powershell 3.0 or higher (see this question to check your Powershell version)
  2. .NET Core SDK 3.1 or higher
  3. .NET Framework 4.8 Developer Pack
Execution

To build the source, clone or download and unzip the repository. From the repository root, execute:

> build [options]
Build Options

NuGet packages are output by the build to the /release/NuGetPackages/ directory. Test results (if applicable) are output to the /release/TestResults/ directory.

You can setup Visual Studio to read the NuGet packages like any NuGet feed by following these steps:

  1. In Visual Studio, right-click the solution in Solution Explorer, and choose “Manage NuGet Packages for Solution”
  2. Click the gear icon next to the Package sources dropdown.
  3. Click the + icon (for add)
  4. Give the source a name such as Lucene.Net Local Packages
  5. Click the ... button next to the Source field, and choose the /src/release/NuGetPackages folder on your local system.
  6. Click Ok

Then all you need to do is choose the Lucene.Net Local Packages feed from the dropdown (in the NuGet Package Manager) and you can search for, install, and update the NuGet packages just as you can with any Internet-based feed.

Visual Studio

Prerequisites

  1. Visual Studio 2019 or higher
  2. .NET Core SDK 3.1 or higher
  3. .NET Framework 4.8 Developer Pack

Execution

  1. Open Lucene.Net.sln in Visual Studio.
  2. Choose the target framework to test by opening build/TestTargetFramework.proj and uncommenting the corresponding <TargetFramework>.
  3. Build a project or the entire solution, and wait for Visual Studio to discover the tests - this may take several minutes.
  4. Run or debug the tests in Test Explorer, optionally using the desired filters.

NOTE: When running tests in Visual Studio, be sure to set the default processor architecture to 64 bit to avoid running out of virtual memory on some tests.