You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2022/01/08 12:25:15 UTC

[lucenenet] branch master updated (a3852df -> bc6f14f)

This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git.


    from a3852df  Add How to Setup Java Debugging page
     new 11e4c06  Moved build directory to .build, release to _artifacts, renamed build.ps1 > runbuild.ps1
     new ba1052e  .build: Upgraded psake build automation to 4.9.0
     new 9a25492  .build/runbuild.ps1: Removed dependency on dotnet-install.ps1 and simply throw an exception if the .NET SDK doesn't meet the minimum version
     new 329c90a  .gitattributes: Never checkout BASH scripts with Widows line endings
     new 0c56b7a  Added bash script, build.ps1 script to process command arguments, and modified build.bat to only pass the arguments to build.ps1 without doing any processing, only checking for the existence of Powershell. Fixes #364.
     new ec80a8b  Lucene.Net.sln: Added .rat-excludes to Solution Items
     new f990bd3  azure-pipelines.yml: Updated to correctly case version.props file for packaging, and to ignore build.bat because we no longer modify it during release
     new f1d4b46  run-tests-on-os.yml: Changed references from dotnet vstest to dotnet test in comments, log files, and display names
     new 71b981f  show-all-files.yml: Removed invalid doc comment
     new c47dd66  .build/runbuild.ps1: Track added files so they can be reverted if the build is cancelled
     new 9668f5a  .github/workflows/Generate-TestWorkflows.ps1: Updated to use .NET 6 SDK for all testing
     new 9d5cf50  .github/workflows/Generate-TestWorkflows.ps1: Removed special case code for projects that only have one test target framework
     new b489eb5  Revert ".github/workflows/Generate-TestWorkflows.ps1: Updated to use .NET 6 SDK for all testing"
     new 358d9cf  run-tests-on-os.yml: Install SDKs for legacy targets, if necessary, but do so after we disable telemetry
     new bc6f14f  .github/workflows: Regenerated workflows with original legacy SDK settings

The 15 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 {build => .build}/TestReferences.Common.targets    |    0
 .build/azure-templates/install-dotnet-sdk.yml      |   42 +
 .../azure-templates/publish-nuget-packages.yml     |    0
 .../azure-templates/publish-test-binaries.yml      |    0
 .../publish-test-results-for-test-projects.yml     |    0
 .../azure-templates/publish-test-results.yml       |    0
 .../azure-templates/run-tests-on-os.yml            |   24 +-
 .../show-all-environment-variables.yml             |    0
 .../azure-templates/show-all-files.yml             |    6 +-
 .../dependencies.props                             |    0
 build/NuGet.props => .build/nuget.props            |    0
 .build/psake/LICENSE                               |   21 +
 .build/psake/en-US/psake.psm1-help.xml.old         | 2265 ++++++++++++++++++++
 .build/psake/private/CleanupEnvironment.ps1        |   12 +
 .build/psake/private/ConfigureBuildEnvironment.ps1 |  202 ++
 .../private/CreateConfigurationForNewContext.ps1   |   28 +
 .build/psake/private/ExecuteInBuildFileScope.ps1   |   58 +
 .build/psake/private/FormatErrorMessage.ps1        |   26 +
 .build/psake/private/Get-DefaultBuildFile.ps1      |   17 +
 .../private/GetCurrentConfigurationOrDefault.ps1   |    7 +
 .build/psake/private/GetTasksFromContext.ps1       |   15 +
 .build/psake/private/LoadConfiguration.ps1         |   31 +
 .build/psake/private/LoadModules.ps1               |   21 +
 .build/psake/private/ResolveError.ps1              |   62 +
 .build/psake/private/SelectObjectWithDefault.ps1   |   23 +
 .build/psake/private/Test-ModuleVersion.ps1        |  107 +
 .build/psake/private/WriteColoredOutput.ps1        |   20 +
 .build/psake/private/WriteDocumentation.ps1        |   26 +
 .build/psake/private/WriteTaskTimeSummary.ps1      |   34 +
 .build/psake/psake                                 |   12 +
 .build/psake/psake-config.ps1                      |   22 +
 .build/psake/psake.cmd                             |   14 +
 .build/psake/psake.ps1                             |   71 +
 .build/psake/psake.psd1                            |   33 +
 .build/psake/psake.psm1                            |  112 +
 .build/psake/public/Assert.ps1                     |   71 +
 .build/psake/public/BuildSetup.ps1                 |   55 +
 .build/psake/public/BuildTearDown.ps1              |   75 +
 .build/psake/public/Exec.ps1                       |  110 +
 .build/psake/public/FormatTaskName.ps1             |   95 +
 .build/psake/public/Framework.ps1                  |   55 +
 .build/psake/public/Get-PSakeScriptTasks.ps1       |   45 +
 .build/psake/public/Include.ps1                    |   64 +
 .build/psake/public/Invoke-Task.ps1                |  158 ++
 .build/psake/public/Invoke-psake.ps1               |  343 +++
 .build/psake/public/Properties.ps1                 |   61 +
 .build/psake/public/Task.ps1                       |  331 +++
 .build/psake/public/TaskSetup.ps1                  |  102 +
 .build/psake/public/TaskTearDown.ps1               |  107 +
 .build/psake/readme.md                             |   13 +
 build/Release.targets => .build/release.targets    |    2 +-
 build/build.ps1 => .build/runbuild.ps1             |  394 ++--
 .gitattributes                                     |   10 +-
 .github/workflows/Generate-TestWorkflows.ps1       |   29 +-
 .github/workflows/Lucene-Net-Tests-AllProjects.yml |    6 +-
 .../workflows/Lucene-Net-Tests-Analysis-Common.yml |    6 +-
 .../Lucene-Net-Tests-Analysis-Kuromoji.yml         |    6 +-
 .../Lucene-Net-Tests-Analysis-Morfologik.yml       |    6 +-
 .../Lucene-Net-Tests-Analysis-OpenNLP.yml          |    4 +-
 .../Lucene-Net-Tests-Analysis-Phonetic.yml         |    6 +-
 .../Lucene-Net-Tests-Analysis-SmartCn.yml          |    6 +-
 .../Lucene-Net-Tests-Analysis-Stempel.yml          |    6 +-
 .github/workflows/Lucene-Net-Tests-Benchmark.yml   |    6 +-
 .../workflows/Lucene-Net-Tests-Classification.yml  |    6 +-
 .github/workflows/Lucene-Net-Tests-Cli.yml         |    4 +-
 .../workflows/Lucene-Net-Tests-CodeAnalysis.yml    |    4 +-
 .github/workflows/Lucene-Net-Tests-Codecs.yml      |    6 +-
 .github/workflows/Lucene-Net-Tests-Demo.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-Expressions.yml |    6 +-
 .github/workflows/Lucene-Net-Tests-Facet.yml       |    6 +-
 .github/workflows/Lucene-Net-Tests-Grouping.yml    |    6 +-
 .github/workflows/Lucene-Net-Tests-Highlighter.yml |    6 +-
 .github/workflows/Lucene-Net-Tests-ICU.yml         |    6 +-
 .github/workflows/Lucene-Net-Tests-Join.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-Memory.yml      |    6 +-
 .github/workflows/Lucene-Net-Tests-Misc.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-Queries.yml     |    6 +-
 .github/workflows/Lucene-Net-Tests-QueryParser.yml |    6 +-
 .github/workflows/Lucene-Net-Tests-Replicator.yml  |    6 +-
 .github/workflows/Lucene-Net-Tests-Sandbox.yml     |    6 +-
 .github/workflows/Lucene-Net-Tests-Spatial.yml     |    6 +-
 .github/workflows/Lucene-Net-Tests-Suggest.yml     |    6 +-
 ...Net-Tests-TestFramework-DependencyInjection.yml |    6 +-
 .../workflows/Lucene-Net-Tests-TestFramework.yml   |    6 +-
 .github/workflows/Lucene-Net-Tests-_A-D.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-_E-I.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-_I-J.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-_J-S.yml        |    6 +-
 .github/workflows/Lucene-Net-Tests-_T-Z.yml        |    6 +-
 .gitignore                                         |    3 +-
 .rat-excludes                                      |    3 +
 Directory.Build.props                              |    2 +-
 Directory.Build.targets                            |   15 +-
 LICENSE.txt                                        |   31 +-
 Lucene.Net.sln                                     |   82 +-
 README.md                                          |   62 +-
 TestTargetFramework.props                          |    4 +
 azure-pipelines.yml                                |  103 +-
 build                                              |   55 +
 build.bat                                          |  109 +-
 build.ps1                                          |   96 +
 build/dotnet-install.ps1                           |  686 ------
 build/psake.cmd                                    |   29 -
 build/psake.ps1                                    |   53 -
 build/psake.psd1                                   |   31 -
 build/psake.psm1                                   |  925 --------
 .../Lucene.Net.Analysis.Common.csproj              |    7 +-
 .../Lucene.Net.Analysis.Kuromoji.csproj            |    7 +-
 .../Lucene.Net.Analysis.Morfologik.csproj          |    7 +-
 .../Lucene.Net.Analysis.OpenNLP.csproj             |    7 +-
 .../Lucene.Net.Analysis.Phonetic.csproj            |    7 +-
 .../Lucene.Net.Analysis.SmartCn.csproj             |    7 +-
 .../Lucene.Net.Analysis.Stempel.csproj             |    7 +-
 .../Lucene.Net.Benchmark.csproj                    |    7 +-
 .../Lucene.Net.Classification.csproj               |    7 +-
 src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj     |    7 +-
 src/Lucene.Net.Demo/Lucene.Net.Demo.csproj         |    3 +-
 .../Lucene.Net.Expressions.csproj                  |    7 +-
 src/Lucene.Net.Facet/Lucene.Net.Facet.csproj       |    7 +-
 src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj |    7 +-
 .../Lucene.Net.Highlighter.csproj                  |    7 +-
 src/Lucene.Net.Join/Lucene.Net.Join.csproj         |    7 +-
 src/Lucene.Net.Memory/Lucene.Net.Memory.csproj     |    7 +-
 src/Lucene.Net.Misc/Lucene.Net.Misc.csproj         |    7 +-
 src/Lucene.Net.Queries/Lucene.Net.Queries.csproj   |    7 +-
 .../Lucene.Net.QueryParser.csproj                  |    7 +-
 .../Lucene.Net.Replicator.csproj                   |    7 +-
 src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj   |    7 +-
 src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj   |    7 +-
 src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj   |    7 +-
 .../Lucene.Net.TestFramework.csproj                |    7 +-
 .../Lucene.Net.Tests.AllProjects.csproj            |    2 +-
 .../Lucene.Net.Tests.Analysis.Common.csproj        |    2 +-
 .../Lucene.Net.Tests.Analysis.Kuromoji.csproj      |    2 +-
 .../Lucene.Net.Tests.Analysis.Morfologik.csproj    |    2 +-
 .../Lucene.Net.Tests.Analysis.OpenNLP.csproj       |    7 +-
 .../Lucene.Net.Tests.Analysis.Phonetic.csproj      |    2 +-
 .../Lucene.Net.Tests.Analysis.SmartCn.csproj       |    2 +-
 .../Lucene.Net.Tests.Analysis.Stempel.csproj       |    2 +-
 .../Lucene.Net.Tests.Benchmark.csproj              |    2 +-
 .../Lucene.Net.Tests.Classification.csproj         |    2 +-
 .../Lucene.Net.Tests.Codecs.csproj                 |    2 +-
 .../Lucene.Net.Tests.Demo.csproj                   |    2 +-
 .../Lucene.Net.Tests.Expressions.csproj            |    2 +-
 .../Lucene.Net.Tests.Facet.csproj                  |    2 +-
 .../Lucene.Net.Tests.Grouping.csproj               |    2 +-
 .../Lucene.Net.Tests.Highlighter.csproj            |    2 +-
 .../Lucene.Net.Tests.Join.csproj                   |    2 +-
 .../Lucene.Net.Tests.Memory.csproj                 |    2 +-
 .../Lucene.Net.Tests.Misc.csproj                   |    2 +-
 .../Lucene.Net.Tests.Queries.csproj                |    2 +-
 .../Lucene.Net.Tests.QueryParser.csproj            |    2 +-
 .../Lucene.Net.Tests.Replicator.csproj             |    2 +-
 .../Lucene.Net.Tests.Sandbox.csproj                |    2 +-
 .../Lucene.Net.Tests.Spatial.csproj                |    2 +-
 .../Lucene.Net.Tests.Suggest.csproj                |    2 +-
 ....Tests.TestFramework.DependencyInjection.csproj |    2 +-
 .../Lucene.Net.Tests.TestFramework.csproj          |    2 +-
 .../Lucene.Net.Tests._A-D.csproj                   |    2 +-
 .../Lucene.Net.Tests._E-I.csproj                   |    2 +-
 .../Lucene.Net.Tests._I-J.csproj                   |    2 +-
 .../Lucene.Net.Tests._J-S.csproj                   |    2 +-
 .../Lucene.Net.Tests._T-Z.csproj                   |    2 +-
 src/Lucene.Net/Lucene.Net.csproj                   |    5 +-
 src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj    |    7 +-
 .../Lucene.Net.Replicator.AspNetCore.csproj        |    5 +-
 .../Lucene.Net.Tests.CodeAnalysis.csproj           |    3 +-
 .../Lucene.Net.Tests.ICU.csproj                    |    2 +-
 .../Lucene.Net.Tests.Cli.csproj                    |    3 +-
 src/dotnet/tools/lucene-cli/lucene-cli.csproj      |    2 +-
 170 files changed, 5731 insertions(+), 2460 deletions(-)
 rename {build => .build}/TestReferences.Common.targets (100%)
 create mode 100644 .build/azure-templates/install-dotnet-sdk.yml
 rename {build => .build}/azure-templates/publish-nuget-packages.yml (100%)
 rename {build => .build}/azure-templates/publish-test-binaries.yml (100%)
 rename {build => .build}/azure-templates/publish-test-results-for-test-projects.yml (100%)
 rename {build => .build}/azure-templates/publish-test-results.yml (100%)
 rename {build => .build}/azure-templates/run-tests-on-os.yml (94%)
 rename {build => .build}/azure-templates/show-all-environment-variables.yml (100%)
 rename {build => .build}/azure-templates/show-all-files.yml (76%)
 rename build/Dependencies.props => .build/dependencies.props (100%)
 rename build/NuGet.props => .build/nuget.props (100%)
 create mode 100644 .build/psake/LICENSE
 create mode 100644 .build/psake/en-US/psake.psm1-help.xml.old
 create mode 100644 .build/psake/private/CleanupEnvironment.ps1
 create mode 100644 .build/psake/private/ConfigureBuildEnvironment.ps1
 create mode 100644 .build/psake/private/CreateConfigurationForNewContext.ps1
 create mode 100644 .build/psake/private/ExecuteInBuildFileScope.ps1
 create mode 100644 .build/psake/private/FormatErrorMessage.ps1
 create mode 100644 .build/psake/private/Get-DefaultBuildFile.ps1
 create mode 100644 .build/psake/private/GetCurrentConfigurationOrDefault.ps1
 create mode 100644 .build/psake/private/GetTasksFromContext.ps1
 create mode 100644 .build/psake/private/LoadConfiguration.ps1
 create mode 100644 .build/psake/private/LoadModules.ps1
 create mode 100644 .build/psake/private/ResolveError.ps1
 create mode 100644 .build/psake/private/SelectObjectWithDefault.ps1
 create mode 100644 .build/psake/private/Test-ModuleVersion.ps1
 create mode 100644 .build/psake/private/WriteColoredOutput.ps1
 create mode 100644 .build/psake/private/WriteDocumentation.ps1
 create mode 100644 .build/psake/private/WriteTaskTimeSummary.ps1
 create mode 100644 .build/psake/psake
 create mode 100644 .build/psake/psake-config.ps1
 create mode 100644 .build/psake/psake.cmd
 create mode 100644 .build/psake/psake.ps1
 create mode 100644 .build/psake/psake.psd1
 create mode 100644 .build/psake/psake.psm1
 create mode 100644 .build/psake/public/Assert.ps1
 create mode 100644 .build/psake/public/BuildSetup.ps1
 create mode 100644 .build/psake/public/BuildTearDown.ps1
 create mode 100644 .build/psake/public/Exec.ps1
 create mode 100644 .build/psake/public/FormatTaskName.ps1
 create mode 100644 .build/psake/public/Framework.ps1
 create mode 100644 .build/psake/public/Get-PSakeScriptTasks.ps1
 create mode 100644 .build/psake/public/Include.ps1
 create mode 100644 .build/psake/public/Invoke-Task.ps1
 create mode 100644 .build/psake/public/Invoke-psake.ps1
 create mode 100644 .build/psake/public/Properties.ps1
 create mode 100644 .build/psake/public/Task.ps1
 create mode 100644 .build/psake/public/TaskSetup.ps1
 create mode 100644 .build/psake/public/TaskTearDown.ps1
 create mode 100644 .build/psake/readme.md
 rename build/Release.targets => .build/release.targets (99%)
 rename build/build.ps1 => .build/runbuild.ps1 (70%)
 create mode 100644 build
 create mode 100644 build.ps1
 delete mode 100644 build/dotnet-install.ps1
 delete mode 100644 build/psake.cmd
 delete mode 100644 build/psake.ps1
 delete mode 100644 build/psake.psd1
 delete mode 100644 build/psake.psm1

[lucenenet] 13/15: Revert ".github/workflows/Generate-TestWorkflows.ps1: Updated to use .NET 6 SDK for all testing"

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit b489eb57b6d62e20e77ae77345d6a591f5268988
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 19:06:04 2022 +0700

    Revert ".github/workflows/Generate-TestWorkflows.ps1: Updated to use .NET 6 SDK for all testing"
    
    This reverts commit 855c834fb8fb271cea095b3a8697142cdd000704.
---
 .github/workflows/Generate-TestWorkflows.ps1       | 42 ++++++++++++++++------
 .github/workflows/Lucene-Net-Tests-AllProjects.yml | 20 ++++++++---
 .../workflows/Lucene-Net-Tests-Analysis-Common.yml | 20 ++++++++---
 .../Lucene-Net-Tests-Analysis-Kuromoji.yml         | 20 ++++++++---
 .../Lucene-Net-Tests-Analysis-Morfologik.yml       | 20 ++++++++---
 .../Lucene-Net-Tests-Analysis-OpenNLP.yml          | 20 ++++++++---
 .../Lucene-Net-Tests-Analysis-Phonetic.yml         | 20 ++++++++---
 .../Lucene-Net-Tests-Analysis-SmartCn.yml          | 20 ++++++++---
 .../Lucene-Net-Tests-Analysis-Stempel.yml          | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Benchmark.yml   | 20 ++++++++---
 .../workflows/Lucene-Net-Tests-Classification.yml  | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Cli.yml         | 20 ++++++++---
 .../workflows/Lucene-Net-Tests-CodeAnalysis.yml    | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Codecs.yml      | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Demo.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Expressions.yml | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Facet.yml       | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Grouping.yml    | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Highlighter.yml | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-ICU.yml         | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Join.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Memory.yml      | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Misc.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Queries.yml     | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-QueryParser.yml | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Replicator.yml  | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Sandbox.yml     | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Spatial.yml     | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-Suggest.yml     | 20 ++++++++---
 ...Net-Tests-TestFramework-DependencyInjection.yml | 20 ++++++++---
 .../workflows/Lucene-Net-Tests-TestFramework.yml   | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-_A-D.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-_E-I.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-_I-J.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-_J-S.yml        | 20 ++++++++---
 .github/workflows/Lucene-Net-Tests-_T-Z.yml        | 20 ++++++++---
 36 files changed, 592 insertions(+), 150 deletions(-)

diff --git a/.github/workflows/Generate-TestWorkflows.ps1 b/.github/workflows/Generate-TestWorkflows.ps1
index e80da71..3d55ec4 100644
--- a/.github/workflows/Generate-TestWorkflows.ps1
+++ b/.github/workflows/Generate-TestWorkflows.ps1
@@ -51,10 +51,14 @@
  .PARAMETER Configurations
     A string array of build configurations to run the tests on. The default is @('Release').
 
- .PARAMETER DotNetSDKVersion
-    The SDK version of .NET to install on the build agent to be used for building and
-    testing. This SDK is always installed on the build agent. The default is 6.0.101.
-
+ .PARAMETER DotNet5SDKVersion
+    The SDK version of .NET 5.x to install on the build agent to be used for building and
+    testing. This SDK is always installed on the build agent. The default is 5.0.400.
+
+ .PARAMETER DotNetCore3SDKVersion
+    The SDK version of .NET Core 3.x to install on the build agent to be used for building and
+    testing. This SDK is only installed on the build agent when targeting .NET Core 3.x.
+    The default is 3.1.412.
 #>
 param(
     [string]$OutputDirectory =  $PSScriptRoot,
@@ -69,7 +73,11 @@ param(
 
     [string[]]$Configurations = @('Release'),
 
-    [string]$DotNetSDKVersion = '6.0.101'
+    [string]$DotNet6SDKVersion = '6.0.100',
+
+    [string]$DotNet5SDKVersion = '5.0.400',
+
+    [string]$DotNetCore3SDKVersion = '3.1.412'
 )
 
 
@@ -149,7 +157,9 @@ function Write-TestWorkflow(
     [string[]]$TestFrameworks = @('net5.0', 'net48'),
     [string[]]$TestPlatforms = @('x64'),
     [string[]]$OperatingSystems = @('windows-latest', 'ubuntu-latest', 'macos-latest'),
-    [string]$DotNetSDKVersion = $DotNetSDKVersion) {
+    [string]$DotNet6SDKVersion = $DotNet6SDKVersion,
+    [string]$DotNet5SDKVersion = $DotNet5SDKVersion,
+    [string]$DotNetCore3SDKVersion = $DotNetCore3SDKVersion) {
 
     $dependencies = New-Object System.Collections.Generic.HashSet[string]
     Get-ProjectDependencies $ProjectPath $RelativeRoot $dependencies
@@ -246,10 +256,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '$DotNetCore3SDKVersion'
+        if: `${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '$DotNet5SDKVersion'
+        if: `${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '$DotNetSDKVersion'
+          dotnet-version: '$DotNet6SDKVersion'
 
       - run: |
           `$project_name = [System.IO.Path]::GetFileNameWithoutExtension(`$env:project_path)
@@ -294,7 +316,7 @@ try {
     Pop-Location
 }
 
-#Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $projectPath -RelativeRoot $repoRoot -TestFrameworks @('net5.0','netcoreapp3.1') -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNetSDKVersion $DotNetSDKVersion
+#Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $projectPath -RelativeRoot $repoRoot -TestFrameworks @('net5.0','netcoreapp3.1') -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNet6SDKVersion $DotNet6SDKVersion -DotNet5SDKVersion $DotNet5SDKVersion -DotNetCore3SDKVersion $DotNetCore3SDKVersion
 
 #Write-Host $TestProjects
 
@@ -321,5 +343,5 @@ foreach ($testProject in $TestProjects) {
     Write-Host "Frameworks To Test for ${projectName}: $($frameworks -join ';')" -ForegroundColor Cyan
 
     #Write-Host "Project: $projectName"
-    Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $testProject -RelativeRoot $RepoRoot -TestFrameworks $frameworks -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNetSDKVersion $DotNetSDKVersion
+    Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $testProject -RelativeRoot $RepoRoot -TestFrameworks $frameworks -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNet6SDKVersion $DotNet6SDKVersion -DotNet5SDKVersion $DotNet5SDKVersion -DotNetCore3SDKVersion $DotNetCore3SDKVersion
 }
\ No newline at end of file
diff --git a/.github/workflows/Lucene-Net-Tests-AllProjects.yml b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
index 571a849..7c0c332 100644
--- a/.github/workflows/Lucene-Net-Tests-AllProjects.yml
+++ b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.AllProjects/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.AllProjects/Directory.Build.*'
@@ -92,10 +92,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
index 20506b5..806f6ee 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Common/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Common/Directory.Build.*'
@@ -76,10 +76,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
index 2fd7e84..074bedb 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Kuromoji/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Kuromoji/Directory.Build.*'
@@ -73,10 +73,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
index eaf323a..d50b760 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Morfologik/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Morfologik/Directory.Build.*'
@@ -73,10 +73,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml b/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
index b39b731..c91345a 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.OpenNLP/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.OpenNLP/Directory.Build.*'
@@ -76,10 +76,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
index aa62092..43d5132 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Phonetic/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Phonetic/Directory.Build.*'
@@ -70,10 +70,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
index 3b6fb5e..b6853af 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.SmartCn/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.SmartCn/Directory.Build.*'
@@ -74,10 +74,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
index 6b03e8c..553bb64 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Stempel/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Stempel/Directory.Build.*'
@@ -71,10 +71,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Benchmark.yml b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
index 8d9bde6..9f1689d 100644
--- a/.github/workflows/Lucene-Net-Tests-Benchmark.yml
+++ b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Benchmark/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Benchmark/Directory.Build.*'
@@ -83,10 +83,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Classification.yml b/.github/workflows/Lucene-Net-Tests-Classification.yml
index e2cb33b..92b390f 100644
--- a/.github/workflows/Lucene-Net-Tests-Classification.yml
+++ b/.github/workflows/Lucene-Net-Tests-Classification.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Classification/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Classification/Directory.Build.*'
@@ -71,10 +71,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Cli.yml b/.github/workflows/Lucene-Net-Tests-Cli.yml
index f14cc87..454b25b 100644
--- a/.github/workflows/Lucene-Net-Tests-Cli.yml
+++ b/.github/workflows/Lucene-Net-Tests-Cli.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/tools/Lucene.Net.Tests.Cli/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/tools/Lucene.Net.Tests.Cli/Directory.Build.*'
@@ -90,10 +90,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml b/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
index 6de4a05..8573601 100644
--- a/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
+++ b/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/Lucene.Net.Tests.CodeAnalysis/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/Lucene.Net.Tests.CodeAnalysis/Directory.Build.*'
@@ -69,10 +69,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Codecs.yml b/.github/workflows/Lucene-Net-Tests-Codecs.yml
index d97b2e9..badf063 100644
--- a/.github/workflows/Lucene-Net-Tests-Codecs.yml
+++ b/.github/workflows/Lucene-Net-Tests-Codecs.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Codecs/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Codecs/Directory.Build.*'
@@ -69,10 +69,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Demo.yml b/.github/workflows/Lucene-Net-Tests-Demo.yml
index 9290e55..f094248 100644
--- a/.github/workflows/Lucene-Net-Tests-Demo.yml
+++ b/.github/workflows/Lucene-Net-Tests-Demo.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Demo/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Demo/Directory.Build.*'
@@ -78,10 +78,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Expressions.yml b/.github/workflows/Lucene-Net-Tests-Expressions.yml
index 8683860..b6a728a 100644
--- a/.github/workflows/Lucene-Net-Tests-Expressions.yml
+++ b/.github/workflows/Lucene-Net-Tests-Expressions.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Expressions/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Expressions/Directory.Build.*'
@@ -71,10 +71,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Facet.yml b/.github/workflows/Lucene-Net-Tests-Facet.yml
index f9092b5..16024e5 100644
--- a/.github/workflows/Lucene-Net-Tests-Facet.yml
+++ b/.github/workflows/Lucene-Net-Tests-Facet.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Facet/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Facet/Directory.Build.*'
@@ -73,10 +73,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Grouping.yml b/.github/workflows/Lucene-Net-Tests-Grouping.yml
index ed60a69..6986e3f 100644
--- a/.github/workflows/Lucene-Net-Tests-Grouping.yml
+++ b/.github/workflows/Lucene-Net-Tests-Grouping.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Grouping/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Grouping/Directory.Build.*'
@@ -71,10 +71,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Highlighter.yml b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
index dd431d7..91870e2 100644
--- a/.github/workflows/Lucene-Net-Tests-Highlighter.yml
+++ b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Highlighter/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Highlighter/Directory.Build.*'
@@ -73,10 +73,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-ICU.yml b/.github/workflows/Lucene-Net-Tests-ICU.yml
index 59a3d7d..1d9ef7d 100644
--- a/.github/workflows/Lucene-Net-Tests-ICU.yml
+++ b/.github/workflows/Lucene-Net-Tests-ICU.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/Lucene.Net.Tests.ICU/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/Lucene.Net.Tests.ICU/Directory.Build.*'
@@ -86,10 +86,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Join.yml b/.github/workflows/Lucene-Net-Tests-Join.yml
index e251662..f1067e1 100644
--- a/.github/workflows/Lucene-Net-Tests-Join.yml
+++ b/.github/workflows/Lucene-Net-Tests-Join.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Join/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Join/Directory.Build.*'
@@ -72,10 +72,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Memory.yml b/.github/workflows/Lucene-Net-Tests-Memory.yml
index ef649d5..d3d08b2 100644
--- a/.github/workflows/Lucene-Net-Tests-Memory.yml
+++ b/.github/workflows/Lucene-Net-Tests-Memory.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Memory/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Memory/Directory.Build.*'
@@ -74,10 +74,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Misc.yml b/.github/workflows/Lucene-Net-Tests-Misc.yml
index 04fec0e..da54035 100644
--- a/.github/workflows/Lucene-Net-Tests-Misc.yml
+++ b/.github/workflows/Lucene-Net-Tests-Misc.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Misc/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Misc/Directory.Build.*'
@@ -70,10 +70,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Queries.yml b/.github/workflows/Lucene-Net-Tests-Queries.yml
index 2be29ba..01ea056 100644
--- a/.github/workflows/Lucene-Net-Tests-Queries.yml
+++ b/.github/workflows/Lucene-Net-Tests-Queries.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Queries/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Queries/Directory.Build.*'
@@ -70,10 +70,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-QueryParser.yml b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
index 4b3d270..78edee2 100644
--- a/.github/workflows/Lucene-Net-Tests-QueryParser.yml
+++ b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.QueryParser/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.QueryParser/Directory.Build.*'
@@ -76,10 +76,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Replicator.yml b/.github/workflows/Lucene-Net-Tests-Replicator.yml
index b741749..7de0690 100644
--- a/.github/workflows/Lucene-Net-Tests-Replicator.yml
+++ b/.github/workflows/Lucene-Net-Tests-Replicator.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Replicator/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Replicator/Directory.Build.*'
@@ -75,10 +75,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Sandbox.yml b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
index f2d1b75..eba7902 100644
--- a/.github/workflows/Lucene-Net-Tests-Sandbox.yml
+++ b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Sandbox/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Sandbox/Directory.Build.*'
@@ -71,10 +71,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Spatial.yml b/.github/workflows/Lucene-Net-Tests-Spatial.yml
index 8563d86..3e4c57e 100644
--- a/.github/workflows/Lucene-Net-Tests-Spatial.yml
+++ b/.github/workflows/Lucene-Net-Tests-Spatial.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Spatial/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Spatial/Directory.Build.*'
@@ -72,10 +72,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Suggest.yml b/.github/workflows/Lucene-Net-Tests-Suggest.yml
index 99c0b1a..d11f135 100644
--- a/.github/workflows/Lucene-Net-Tests-Suggest.yml
+++ b/.github/workflows/Lucene-Net-Tests-Suggest.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Suggest/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Suggest/Directory.Build.*'
@@ -73,10 +73,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
index a80f617..3f788a0 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.TestFramework.DependencyInjection/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.TestFramework.DependencyInjection/Directory.Build.*'
@@ -69,10 +69,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework.yml b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
index 7696055..12b9065 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.TestFramework/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.TestFramework/Directory.Build.*'
@@ -71,10 +71,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_A-D.yml b/.github/workflows/Lucene-Net-Tests-_A-D.yml
index ac865f2..e596d52 100644
--- a/.github/workflows/Lucene-Net-Tests-_A-D.yml
+++ b/.github/workflows/Lucene-Net-Tests-_A-D.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._A-D/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._A-D/Directory.Build.*'
@@ -80,10 +80,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_E-I.yml b/.github/workflows/Lucene-Net-Tests-_E-I.yml
index d6682ca..f0ba66e 100644
--- a/.github/workflows/Lucene-Net-Tests-_E-I.yml
+++ b/.github/workflows/Lucene-Net-Tests-_E-I.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._E-I/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._E-I/Directory.Build.*'
@@ -90,10 +90,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_I-J.yml b/.github/workflows/Lucene-Net-Tests-_I-J.yml
index 5f57e15..9c632a8 100644
--- a/.github/workflows/Lucene-Net-Tests-_I-J.yml
+++ b/.github/workflows/Lucene-Net-Tests-_I-J.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._I-J/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._I-J/Directory.Build.*'
@@ -95,10 +95,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_J-S.yml b/.github/workflows/Lucene-Net-Tests-_J-S.yml
index 999e516..25e5995 100644
--- a/.github/workflows/Lucene-Net-Tests-_J-S.yml
+++ b/.github/workflows/Lucene-Net-Tests-_J-S.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._J-S/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._J-S/Directory.Build.*'
@@ -82,10 +82,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_T-Z.yml b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
index 2cb3b3c..52a452b 100644
--- a/.github/workflows/Lucene-Net-Tests-_T-Z.yml
+++ b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._T-Z/**/*'
-    - '.build/dependencies.props'
-    - '.build/TestReferences.Common.*'
+    - 'build/Dependencies.props'
+    - 'build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._T-Z/Directory.Build.*'
@@ -77,10 +77,22 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET SDK
+      - name: Setup .NET 3.1 SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '6.0.101'
+          dotnet-version: '3.1.412'
+        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
+
+      - name: Setup .NET 5 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '5.0.400'
+        if: ${{ startswith(matrix.framework, 'net5.') }}
+
+      - name: Setup .NET 6 SDK
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: '6.0.100'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)

[lucenenet] 11/15: .github/workflows/Generate-TestWorkflows.ps1: Updated to use .NET 6 SDK for all testing

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 9668f5aa99e8d32472b5af3b056c24528978bf6c
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 17:55:45 2022 +0700

    .github/workflows/Generate-TestWorkflows.ps1: Updated to use .NET 6 SDK for all testing
---
 .github/workflows/Generate-TestWorkflows.ps1       | 42 ++++++----------------
 .github/workflows/Lucene-Net-Tests-AllProjects.yml | 20 +++--------
 .../workflows/Lucene-Net-Tests-Analysis-Common.yml | 20 +++--------
 .../Lucene-Net-Tests-Analysis-Kuromoji.yml         | 20 +++--------
 .../Lucene-Net-Tests-Analysis-Morfologik.yml       | 20 +++--------
 .../Lucene-Net-Tests-Analysis-OpenNLP.yml          | 20 +++--------
 .../Lucene-Net-Tests-Analysis-Phonetic.yml         | 20 +++--------
 .../Lucene-Net-Tests-Analysis-SmartCn.yml          | 20 +++--------
 .../Lucene-Net-Tests-Analysis-Stempel.yml          | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Benchmark.yml   | 20 +++--------
 .../workflows/Lucene-Net-Tests-Classification.yml  | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Cli.yml         | 20 +++--------
 .../workflows/Lucene-Net-Tests-CodeAnalysis.yml    | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Codecs.yml      | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Demo.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Expressions.yml | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Facet.yml       | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Grouping.yml    | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Highlighter.yml | 20 +++--------
 .github/workflows/Lucene-Net-Tests-ICU.yml         | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Join.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Memory.yml      | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Misc.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Queries.yml     | 20 +++--------
 .github/workflows/Lucene-Net-Tests-QueryParser.yml | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Replicator.yml  | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Sandbox.yml     | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Spatial.yml     | 20 +++--------
 .github/workflows/Lucene-Net-Tests-Suggest.yml     | 20 +++--------
 ...Net-Tests-TestFramework-DependencyInjection.yml | 20 +++--------
 .../workflows/Lucene-Net-Tests-TestFramework.yml   | 20 +++--------
 .github/workflows/Lucene-Net-Tests-_A-D.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-_E-I.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-_I-J.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-_J-S.yml        | 20 +++--------
 .github/workflows/Lucene-Net-Tests-_T-Z.yml        | 20 +++--------
 36 files changed, 150 insertions(+), 592 deletions(-)

diff --git a/.github/workflows/Generate-TestWorkflows.ps1 b/.github/workflows/Generate-TestWorkflows.ps1
index 6626688..f5d0f67 100644
--- a/.github/workflows/Generate-TestWorkflows.ps1
+++ b/.github/workflows/Generate-TestWorkflows.ps1
@@ -51,14 +51,10 @@
  .PARAMETER Configurations
     A string array of build configurations to run the tests on. The default is @('Release').
 
- .PARAMETER DotNet5SDKVersion
-    The SDK version of .NET 5.x to install on the build agent to be used for building and
-    testing. This SDK is always installed on the build agent. The default is 5.0.400.
-
- .PARAMETER DotNetCore3SDKVersion
-    The SDK version of .NET Core 3.x to install on the build agent to be used for building and
-    testing. This SDK is only installed on the build agent when targeting .NET Core 3.x.
-    The default is 3.1.412.
+ .PARAMETER DotNetSDKVersion
+    The SDK version of .NET to install on the build agent to be used for building and
+    testing. This SDK is always installed on the build agent. The default is 6.0.101.
+
 #>
 param(
     [string]$OutputDirectory =  $PSScriptRoot,
@@ -73,11 +69,7 @@ param(
 
     [string[]]$Configurations = @('Release'),
 
-    [string]$DotNet6SDKVersion = '6.0.100',
-
-    [string]$DotNet5SDKVersion = '5.0.400',
-
-    [string]$DotNetCore3SDKVersion = '3.1.412'
+    [string]$DotNetSDKVersion = '6.0.101'
 )
 
 
@@ -157,9 +149,7 @@ function Write-TestWorkflow(
     [string[]]$TestFrameworks = @('net5.0', 'net48'),
     [string[]]$TestPlatforms = @('x64'),
     [string[]]$OperatingSystems = @('windows-latest', 'ubuntu-latest', 'macos-latest'),
-    [string]$DotNet6SDKVersion = $DotNet6SDKVersion,
-    [string]$DotNet5SDKVersion = $DotNet5SDKVersion,
-    [string]$DotNetCore3SDKVersion = $DotNetCore3SDKVersion) {
+    [string]$DotNetSDKVersion = $DotNetSDKVersion) {
 
     $dependencies = New-Object System.Collections.Generic.HashSet[string]
     Get-ProjectDependencies $ProjectPath $RelativeRoot $dependencies
@@ -256,22 +246,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '$DotNetCore3SDKVersion'
-        if: `${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '$DotNet5SDKVersion'
-        if: `${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '$DotNet6SDKVersion'
+          dotnet-version: '$DotNetSDKVersion'
 
       - run: |
           `$project_name = [System.IO.Path]::GetFileNameWithoutExtension(`$env:project_path)
@@ -316,7 +294,7 @@ try {
     Pop-Location
 }
 
-#Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $projectPath -RelativeRoot $repoRoot -TestFrameworks @('net5.0','netcoreapp3.1') -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNet6SDKVersion $DotNet6SDKVersion -DotNet5SDKVersion $DotNet5SDKVersion -DotNetCore3SDKVersion $DotNetCore3SDKVersion
+#Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $projectPath -RelativeRoot $repoRoot -TestFrameworks @('net5.0','netcoreapp3.1') -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNetSDKVersion $DotNetSDKVersion
 
 #Write-Host $TestProjects
 
@@ -340,5 +318,5 @@ foreach ($testProject in $TestProjects) {
     }
 
     #Write-Host "Project: $projectName"
-    Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $testProject -RelativeRoot $RepoRoot -TestFrameworks $frameworks -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNet6SDKVersion $DotNet6SDKVersion -DotNet5SDKVersion $DotNet5SDKVersion -DotNetCore3SDKVersion $DotNetCore3SDKVersion
+    Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $testProject -RelativeRoot $RepoRoot -TestFrameworks $frameworks -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNetSDKVersion $DotNetSDKVersion
 }
\ No newline at end of file
diff --git a/.github/workflows/Lucene-Net-Tests-AllProjects.yml b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
index 2eb4c81..5526d94 100644
--- a/.github/workflows/Lucene-Net-Tests-AllProjects.yml
+++ b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.AllProjects/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.AllProjects/Directory.Build.*'
@@ -92,22 +92,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
index 2a48eb8..9fe6dfb 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Common/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Common/Directory.Build.*'
@@ -76,22 +76,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
index 5864c0e..0d5f990 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Kuromoji/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Kuromoji/Directory.Build.*'
@@ -73,22 +73,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
index 8ac3b68..5b4fb6d 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Morfologik/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Morfologik/Directory.Build.*'
@@ -73,22 +73,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml b/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
index c91345a..b39b731 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.OpenNLP/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.OpenNLP/Directory.Build.*'
@@ -76,22 +76,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
index decc4c6..2242612 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Phonetic/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Phonetic/Directory.Build.*'
@@ -70,22 +70,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
index c1b001b..ec410bb 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.SmartCn/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.SmartCn/Directory.Build.*'
@@ -74,22 +74,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
index 3631b0c..523e1d2 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Stempel/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Stempel/Directory.Build.*'
@@ -71,22 +71,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Benchmark.yml b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
index 7d66c4a..7e5ac55 100644
--- a/.github/workflows/Lucene-Net-Tests-Benchmark.yml
+++ b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Benchmark/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Benchmark/Directory.Build.*'
@@ -83,22 +83,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Classification.yml b/.github/workflows/Lucene-Net-Tests-Classification.yml
index 95d2234..6f615cb 100644
--- a/.github/workflows/Lucene-Net-Tests-Classification.yml
+++ b/.github/workflows/Lucene-Net-Tests-Classification.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Classification/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Classification/Directory.Build.*'
@@ -71,22 +71,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Cli.yml b/.github/workflows/Lucene-Net-Tests-Cli.yml
index 454b25b..f14cc87 100644
--- a/.github/workflows/Lucene-Net-Tests-Cli.yml
+++ b/.github/workflows/Lucene-Net-Tests-Cli.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/tools/Lucene.Net.Tests.Cli/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/tools/Lucene.Net.Tests.Cli/Directory.Build.*'
@@ -90,22 +90,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml b/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
index 8573601..6de4a05 100644
--- a/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
+++ b/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/Lucene.Net.Tests.CodeAnalysis/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/Lucene.Net.Tests.CodeAnalysis/Directory.Build.*'
@@ -69,22 +69,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Codecs.yml b/.github/workflows/Lucene-Net-Tests-Codecs.yml
index 6b0b3de..d1a68ea 100644
--- a/.github/workflows/Lucene-Net-Tests-Codecs.yml
+++ b/.github/workflows/Lucene-Net-Tests-Codecs.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Codecs/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Codecs/Directory.Build.*'
@@ -69,22 +69,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Demo.yml b/.github/workflows/Lucene-Net-Tests-Demo.yml
index f483095..b522214 100644
--- a/.github/workflows/Lucene-Net-Tests-Demo.yml
+++ b/.github/workflows/Lucene-Net-Tests-Demo.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Demo/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Demo/Directory.Build.*'
@@ -78,22 +78,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Expressions.yml b/.github/workflows/Lucene-Net-Tests-Expressions.yml
index 1615603..9da455d 100644
--- a/.github/workflows/Lucene-Net-Tests-Expressions.yml
+++ b/.github/workflows/Lucene-Net-Tests-Expressions.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Expressions/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Expressions/Directory.Build.*'
@@ -71,22 +71,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Facet.yml b/.github/workflows/Lucene-Net-Tests-Facet.yml
index 3974c7f..aae1b43 100644
--- a/.github/workflows/Lucene-Net-Tests-Facet.yml
+++ b/.github/workflows/Lucene-Net-Tests-Facet.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Facet/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Facet/Directory.Build.*'
@@ -73,22 +73,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Grouping.yml b/.github/workflows/Lucene-Net-Tests-Grouping.yml
index dfaf10c..4ad3f1f 100644
--- a/.github/workflows/Lucene-Net-Tests-Grouping.yml
+++ b/.github/workflows/Lucene-Net-Tests-Grouping.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Grouping/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Grouping/Directory.Build.*'
@@ -71,22 +71,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Highlighter.yml b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
index 4317efb..5f94545 100644
--- a/.github/workflows/Lucene-Net-Tests-Highlighter.yml
+++ b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Highlighter/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Highlighter/Directory.Build.*'
@@ -73,22 +73,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-ICU.yml b/.github/workflows/Lucene-Net-Tests-ICU.yml
index 410dfba..f853b30 100644
--- a/.github/workflows/Lucene-Net-Tests-ICU.yml
+++ b/.github/workflows/Lucene-Net-Tests-ICU.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/Lucene.Net.Tests.ICU/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/Lucene.Net.Tests.ICU/Directory.Build.*'
@@ -86,22 +86,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Join.yml b/.github/workflows/Lucene-Net-Tests-Join.yml
index d41e3b7..3c3a62c 100644
--- a/.github/workflows/Lucene-Net-Tests-Join.yml
+++ b/.github/workflows/Lucene-Net-Tests-Join.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Join/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Join/Directory.Build.*'
@@ -72,22 +72,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Memory.yml b/.github/workflows/Lucene-Net-Tests-Memory.yml
index c0aed35..e9f6812 100644
--- a/.github/workflows/Lucene-Net-Tests-Memory.yml
+++ b/.github/workflows/Lucene-Net-Tests-Memory.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Memory/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Memory/Directory.Build.*'
@@ -74,22 +74,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Misc.yml b/.github/workflows/Lucene-Net-Tests-Misc.yml
index dc66eff..cda07b6 100644
--- a/.github/workflows/Lucene-Net-Tests-Misc.yml
+++ b/.github/workflows/Lucene-Net-Tests-Misc.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Misc/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Misc/Directory.Build.*'
@@ -70,22 +70,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Queries.yml b/.github/workflows/Lucene-Net-Tests-Queries.yml
index 513f98e..8c8ac4f 100644
--- a/.github/workflows/Lucene-Net-Tests-Queries.yml
+++ b/.github/workflows/Lucene-Net-Tests-Queries.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Queries/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Queries/Directory.Build.*'
@@ -70,22 +70,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-QueryParser.yml b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
index 01e0581..8463e17 100644
--- a/.github/workflows/Lucene-Net-Tests-QueryParser.yml
+++ b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.QueryParser/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.QueryParser/Directory.Build.*'
@@ -76,22 +76,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Replicator.yml b/.github/workflows/Lucene-Net-Tests-Replicator.yml
index 2bf6a1f..d518a2c 100644
--- a/.github/workflows/Lucene-Net-Tests-Replicator.yml
+++ b/.github/workflows/Lucene-Net-Tests-Replicator.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Replicator/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Replicator/Directory.Build.*'
@@ -75,22 +75,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Sandbox.yml b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
index eb3ab1f..da9c358 100644
--- a/.github/workflows/Lucene-Net-Tests-Sandbox.yml
+++ b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Sandbox/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Sandbox/Directory.Build.*'
@@ -71,22 +71,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Spatial.yml b/.github/workflows/Lucene-Net-Tests-Spatial.yml
index 23ef471..0fdc11d 100644
--- a/.github/workflows/Lucene-Net-Tests-Spatial.yml
+++ b/.github/workflows/Lucene-Net-Tests-Spatial.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Spatial/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Spatial/Directory.Build.*'
@@ -72,22 +72,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-Suggest.yml b/.github/workflows/Lucene-Net-Tests-Suggest.yml
index 21af40a..fbf8f09 100644
--- a/.github/workflows/Lucene-Net-Tests-Suggest.yml
+++ b/.github/workflows/Lucene-Net-Tests-Suggest.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Suggest/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Suggest/Directory.Build.*'
@@ -73,22 +73,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
index 3dd637b..0473df5 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.TestFramework.DependencyInjection/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.TestFramework.DependencyInjection/Directory.Build.*'
@@ -69,22 +69,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework.yml b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
index 1e03773..8d4c7d4 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.TestFramework/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.TestFramework/Directory.Build.*'
@@ -71,22 +71,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_A-D.yml b/.github/workflows/Lucene-Net-Tests-_A-D.yml
index 05b3995..e905e1f 100644
--- a/.github/workflows/Lucene-Net-Tests-_A-D.yml
+++ b/.github/workflows/Lucene-Net-Tests-_A-D.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._A-D/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._A-D/Directory.Build.*'
@@ -80,22 +80,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_E-I.yml b/.github/workflows/Lucene-Net-Tests-_E-I.yml
index 9fa93b4..ffea59b 100644
--- a/.github/workflows/Lucene-Net-Tests-_E-I.yml
+++ b/.github/workflows/Lucene-Net-Tests-_E-I.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._E-I/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._E-I/Directory.Build.*'
@@ -90,22 +90,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_I-J.yml b/.github/workflows/Lucene-Net-Tests-_I-J.yml
index cffc174..b4612bf 100644
--- a/.github/workflows/Lucene-Net-Tests-_I-J.yml
+++ b/.github/workflows/Lucene-Net-Tests-_I-J.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._I-J/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._I-J/Directory.Build.*'
@@ -95,22 +95,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_J-S.yml b/.github/workflows/Lucene-Net-Tests-_J-S.yml
index 2baa8f0..225f048 100644
--- a/.github/workflows/Lucene-Net-Tests-_J-S.yml
+++ b/.github/workflows/Lucene-Net-Tests-_J-S.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._J-S/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._J-S/Directory.Build.*'
@@ -82,22 +82,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
diff --git a/.github/workflows/Lucene-Net-Tests-_T-Z.yml b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
index 7ff9fd7..034d44f 100644
--- a/.github/workflows/Lucene-Net-Tests-_T-Z.yml
+++ b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._T-Z/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._T-Z/Directory.Build.*'
@@ -77,22 +77,10 @@ jobs:
     steps:
       - uses: actions/checkout@v2
 
-      - name: Setup .NET 3.1 SDK
+      - name: Setup .NET SDK
         uses: actions/setup-dotnet@v1
         with:
-          dotnet-version: '3.1.412'
-        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}
-
-      - name: Setup .NET 5 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '5.0.400'
-        if: ${{ startswith(matrix.framework, 'net5.') }}
-
-      - name: Setup .NET 6 SDK
-        uses: actions/setup-dotnet@v1
-        with:
-          dotnet-version: '6.0.100'
+          dotnet-version: '6.0.101'
 
       - run: |
           $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)

[lucenenet] 15/15: .github/workflows: Regenerated workflows with original legacy SDK settings

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit bc6f14f313ce485abf08b4242ba6f89ccd14df4b
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 19:13:25 2022 +0700

    .github/workflows: Regenerated workflows with original legacy SDK settings
---
 .github/workflows/Lucene-Net-Tests-AllProjects.yml                    | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-Common.yml                | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml              | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml            | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml               | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml              | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml               | 4 ++--
 .github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml               | 4 ++--
 .github/workflows/Lucene-Net-Tests-Benchmark.yml                      | 4 ++--
 .github/workflows/Lucene-Net-Tests-Classification.yml                 | 4 ++--
 .github/workflows/Lucene-Net-Tests-Cli.yml                            | 4 ++--
 .github/workflows/Lucene-Net-Tests-CodeAnalysis.yml                   | 4 ++--
 .github/workflows/Lucene-Net-Tests-Codecs.yml                         | 4 ++--
 .github/workflows/Lucene-Net-Tests-Demo.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-Expressions.yml                    | 4 ++--
 .github/workflows/Lucene-Net-Tests-Facet.yml                          | 4 ++--
 .github/workflows/Lucene-Net-Tests-Grouping.yml                       | 4 ++--
 .github/workflows/Lucene-Net-Tests-Highlighter.yml                    | 4 ++--
 .github/workflows/Lucene-Net-Tests-ICU.yml                            | 4 ++--
 .github/workflows/Lucene-Net-Tests-Join.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-Memory.yml                         | 4 ++--
 .github/workflows/Lucene-Net-Tests-Misc.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-Queries.yml                        | 4 ++--
 .github/workflows/Lucene-Net-Tests-QueryParser.yml                    | 4 ++--
 .github/workflows/Lucene-Net-Tests-Replicator.yml                     | 4 ++--
 .github/workflows/Lucene-Net-Tests-Sandbox.yml                        | 4 ++--
 .github/workflows/Lucene-Net-Tests-Spatial.yml                        | 4 ++--
 .github/workflows/Lucene-Net-Tests-Suggest.yml                        | 4 ++--
 .../workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml  | 4 ++--
 .github/workflows/Lucene-Net-Tests-TestFramework.yml                  | 4 ++--
 .github/workflows/Lucene-Net-Tests-_A-D.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-_E-I.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-_I-J.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-_J-S.yml                           | 4 ++--
 .github/workflows/Lucene-Net-Tests-_T-Z.yml                           | 4 ++--
 35 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/.github/workflows/Lucene-Net-Tests-AllProjects.yml b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
index 7c0c332..306c713 100644
--- a/.github/workflows/Lucene-Net-Tests-AllProjects.yml
+++ b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.AllProjects/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.AllProjects/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
index 806f6ee..dd36ff3 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Common/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Common/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
index 074bedb..ad78036 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Kuromoji/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Kuromoji/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
index d50b760..5b923d7 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Morfologik/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Morfologik/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml b/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
index c91345a..853025c 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-OpenNLP.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.OpenNLP/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.OpenNLP/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
index 43d5132..56d58ff 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Phonetic/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Phonetic/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
index b6853af..9495b19 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.SmartCn/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.SmartCn/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
index 553bb64..e87f95d 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Analysis.Stempel/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Analysis.Stempel/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Benchmark.yml b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
index 9f1689d..0596981 100644
--- a/.github/workflows/Lucene-Net-Tests-Benchmark.yml
+++ b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Benchmark/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Benchmark/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Classification.yml b/.github/workflows/Lucene-Net-Tests-Classification.yml
index 92b390f..d6e85f6 100644
--- a/.github/workflows/Lucene-Net-Tests-Classification.yml
+++ b/.github/workflows/Lucene-Net-Tests-Classification.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Classification/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Classification/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Cli.yml b/.github/workflows/Lucene-Net-Tests-Cli.yml
index 454b25b..f78c5fe 100644
--- a/.github/workflows/Lucene-Net-Tests-Cli.yml
+++ b/.github/workflows/Lucene-Net-Tests-Cli.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/tools/Lucene.Net.Tests.Cli/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/tools/Lucene.Net.Tests.Cli/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml b/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
index 8573601..55f7c50 100644
--- a/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
+++ b/.github/workflows/Lucene-Net-Tests-CodeAnalysis.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/Lucene.Net.Tests.CodeAnalysis/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/Lucene.Net.Tests.CodeAnalysis/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Codecs.yml b/.github/workflows/Lucene-Net-Tests-Codecs.yml
index badf063..c823f1c 100644
--- a/.github/workflows/Lucene-Net-Tests-Codecs.yml
+++ b/.github/workflows/Lucene-Net-Tests-Codecs.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Codecs/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Codecs/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Demo.yml b/.github/workflows/Lucene-Net-Tests-Demo.yml
index f094248..1a72732 100644
--- a/.github/workflows/Lucene-Net-Tests-Demo.yml
+++ b/.github/workflows/Lucene-Net-Tests-Demo.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Demo/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Demo/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Expressions.yml b/.github/workflows/Lucene-Net-Tests-Expressions.yml
index b6a728a..0e657c1 100644
--- a/.github/workflows/Lucene-Net-Tests-Expressions.yml
+++ b/.github/workflows/Lucene-Net-Tests-Expressions.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Expressions/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Expressions/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Facet.yml b/.github/workflows/Lucene-Net-Tests-Facet.yml
index 16024e5..61c8f9b 100644
--- a/.github/workflows/Lucene-Net-Tests-Facet.yml
+++ b/.github/workflows/Lucene-Net-Tests-Facet.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Facet/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Facet/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Grouping.yml b/.github/workflows/Lucene-Net-Tests-Grouping.yml
index 6986e3f..852f532 100644
--- a/.github/workflows/Lucene-Net-Tests-Grouping.yml
+++ b/.github/workflows/Lucene-Net-Tests-Grouping.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Grouping/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Grouping/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Highlighter.yml b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
index 91870e2..33053f8 100644
--- a/.github/workflows/Lucene-Net-Tests-Highlighter.yml
+++ b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Highlighter/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Highlighter/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-ICU.yml b/.github/workflows/Lucene-Net-Tests-ICU.yml
index 1d9ef7d..3fb6a94 100644
--- a/.github/workflows/Lucene-Net-Tests-ICU.yml
+++ b/.github/workflows/Lucene-Net-Tests-ICU.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/dotnet/Lucene.Net.Tests.ICU/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/dotnet/Lucene.Net.Tests.ICU/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Join.yml b/.github/workflows/Lucene-Net-Tests-Join.yml
index f1067e1..cca8d10 100644
--- a/.github/workflows/Lucene-Net-Tests-Join.yml
+++ b/.github/workflows/Lucene-Net-Tests-Join.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Join/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Join/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Memory.yml b/.github/workflows/Lucene-Net-Tests-Memory.yml
index d3d08b2..cc74762 100644
--- a/.github/workflows/Lucene-Net-Tests-Memory.yml
+++ b/.github/workflows/Lucene-Net-Tests-Memory.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Memory/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Memory/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Misc.yml b/.github/workflows/Lucene-Net-Tests-Misc.yml
index da54035..8fc485f 100644
--- a/.github/workflows/Lucene-Net-Tests-Misc.yml
+++ b/.github/workflows/Lucene-Net-Tests-Misc.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Misc/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Misc/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Queries.yml b/.github/workflows/Lucene-Net-Tests-Queries.yml
index 01ea056..bdb011f 100644
--- a/.github/workflows/Lucene-Net-Tests-Queries.yml
+++ b/.github/workflows/Lucene-Net-Tests-Queries.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Queries/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Queries/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-QueryParser.yml b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
index 78edee2..9e33dd4 100644
--- a/.github/workflows/Lucene-Net-Tests-QueryParser.yml
+++ b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.QueryParser/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.QueryParser/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Replicator.yml b/.github/workflows/Lucene-Net-Tests-Replicator.yml
index 7de0690..8d6351f 100644
--- a/.github/workflows/Lucene-Net-Tests-Replicator.yml
+++ b/.github/workflows/Lucene-Net-Tests-Replicator.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Replicator/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Replicator/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Sandbox.yml b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
index eba7902..f7adbe2 100644
--- a/.github/workflows/Lucene-Net-Tests-Sandbox.yml
+++ b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Sandbox/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Sandbox/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Spatial.yml b/.github/workflows/Lucene-Net-Tests-Spatial.yml
index 3e4c57e..e9e72c4 100644
--- a/.github/workflows/Lucene-Net-Tests-Spatial.yml
+++ b/.github/workflows/Lucene-Net-Tests-Spatial.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Spatial/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Spatial/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-Suggest.yml b/.github/workflows/Lucene-Net-Tests-Suggest.yml
index d11f135..576589a 100644
--- a/.github/workflows/Lucene-Net-Tests-Suggest.yml
+++ b/.github/workflows/Lucene-Net-Tests-Suggest.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.Suggest/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.Suggest/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
index 3f788a0..08c4a6a 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.TestFramework.DependencyInjection/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.TestFramework.DependencyInjection/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework.yml b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
index 12b9065..8c9f5eb 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests.TestFramework/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests.TestFramework/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-_A-D.yml b/.github/workflows/Lucene-Net-Tests-_A-D.yml
index e596d52..ce1f9ea 100644
--- a/.github/workflows/Lucene-Net-Tests-_A-D.yml
+++ b/.github/workflows/Lucene-Net-Tests-_A-D.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._A-D/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._A-D/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-_E-I.yml b/.github/workflows/Lucene-Net-Tests-_E-I.yml
index f0ba66e..d500cdd 100644
--- a/.github/workflows/Lucene-Net-Tests-_E-I.yml
+++ b/.github/workflows/Lucene-Net-Tests-_E-I.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._E-I/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._E-I/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-_I-J.yml b/.github/workflows/Lucene-Net-Tests-_I-J.yml
index 9c632a8..0516058 100644
--- a/.github/workflows/Lucene-Net-Tests-_I-J.yml
+++ b/.github/workflows/Lucene-Net-Tests-_I-J.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._I-J/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._I-J/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-_J-S.yml b/.github/workflows/Lucene-Net-Tests-_J-S.yml
index 25e5995..0aeb448 100644
--- a/.github/workflows/Lucene-Net-Tests-_J-S.yml
+++ b/.github/workflows/Lucene-Net-Tests-_J-S.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._J-S/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._J-S/Directory.Build.*'
diff --git a/.github/workflows/Lucene-Net-Tests-_T-Z.yml b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
index 52a452b..c16c892 100644
--- a/.github/workflows/Lucene-Net-Tests-_T-Z.yml
+++ b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
@@ -25,8 +25,8 @@ on:
   pull_request:
     paths:
     - 'src/Lucene.Net.Tests._T-Z/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'
     - 'src/Lucene.Net.Tests._T-Z/Directory.Build.*'

[lucenenet] 05/15: Added bash script, build.ps1 script to process command arguments, and modified build.bat to only pass the arguments to build.ps1 without doing any processing, only checking for the existence of Powershell. Fixes #364.

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 0c56b7a88ac4fe91ae8568b8975d0b8fc96c265d
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Thu Jan 6 13:28:43 2022 +0700

    Added bash script, build.ps1 script to process command arguments, and modified build.bat to only pass the arguments to build.ps1 without doing any processing, only checking for the existence of Powershell. Fixes #364.
---
 .build/azure-templates/install-dotnet-sdk.yml      |  42 +++
 .build/azure-templates/run-tests-on-os.yml         |  22 +-
 .build/runbuild.ps1                                | 285 +++++++--------------
 Directory.Build.targets                            |  11 +
 Lucene.Net.sln                                     |   3 +
 README.md                                          |  56 ++--
 TestTargetFramework.props                          |   4 +
 azure-pipelines.yml                                |  31 ++-
 build                                              |  55 ++++
 build.bat                                          | 109 +-------
 build.ps1                                          |  96 +++++++
 .../Lucene.Net.Analysis.Common.csproj              |   3 +-
 .../Lucene.Net.Analysis.Kuromoji.csproj            |   3 +-
 .../Lucene.Net.Analysis.Morfologik.csproj          |   3 +-
 .../Lucene.Net.Analysis.OpenNLP.csproj             |   3 +-
 .../Lucene.Net.Analysis.Phonetic.csproj            |   3 +-
 .../Lucene.Net.Analysis.SmartCn.csproj             |   3 +-
 .../Lucene.Net.Analysis.Stempel.csproj             |   3 +-
 .../Lucene.Net.Benchmark.csproj                    |   3 +-
 .../Lucene.Net.Classification.csproj               |   3 +-
 src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj     |   3 +-
 src/Lucene.Net.Demo/Lucene.Net.Demo.csproj         |   3 +-
 .../Lucene.Net.Expressions.csproj                  |   3 +-
 src/Lucene.Net.Facet/Lucene.Net.Facet.csproj       |   3 +-
 src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj |   3 +-
 .../Lucene.Net.Highlighter.csproj                  |   3 +-
 src/Lucene.Net.Join/Lucene.Net.Join.csproj         |   3 +-
 src/Lucene.Net.Memory/Lucene.Net.Memory.csproj     |   3 +-
 src/Lucene.Net.Misc/Lucene.Net.Misc.csproj         |   3 +-
 src/Lucene.Net.Queries/Lucene.Net.Queries.csproj   |   3 +-
 .../Lucene.Net.QueryParser.csproj                  |   3 +-
 .../Lucene.Net.Replicator.csproj                   |   3 +-
 src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj   |   3 +-
 src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj   |   3 +-
 src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj   |   3 +-
 .../Lucene.Net.TestFramework.csproj                |   3 +-
 .../Lucene.Net.Tests.Analysis.OpenNLP.csproj       |   5 +
 src/Lucene.Net/Lucene.Net.csproj                   |   3 +-
 src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj    |   3 +-
 .../Lucene.Net.Replicator.AspNetCore.csproj        |   3 +-
 .../Lucene.Net.Tests.CodeAnalysis.csproj           |   1 +
 .../Lucene.Net.Tests.Cli.csproj                    |   1 +
 42 files changed, 418 insertions(+), 387 deletions(-)

diff --git a/.build/azure-templates/install-dotnet-sdk.yml b/.build/azure-templates/install-dotnet-sdk.yml
new file mode 100644
index 0000000..4737996
--- /dev/null
+++ b/.build/azure-templates/install-dotnet-sdk.yml
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Installs the .NET SDK and disables telemetry
+
+parameters:
+  sdkVersion: '' # The .NET SDK version to install
+
+steps:
+- pwsh: |
+    function EnsureNotNullOrEmpty([string]$param, [string]$nameOfParam) {
+        if ([string]::IsNullOrEmpty($param)) {
+            Write-Host "##vso[task.logissue type=error;]Missing template parameter \"$nameOfParam\""
+            Write-Host "##vso[task.complete result=Failed;]"
+        }
+    }
+    EnsureNotNullOrEmpty('${{ parameters.sdkVersion }}', 'sdkVersion')
+  displayName: 'Validate Template Parameters'
+
+- bash: |
+    echo "##vso[task.setvariable variable=DOTNET_NOLOGO;]1"
+    echo "##vso[task.setvariable variable=DOTNET_CLI_TELEMETRY_OPTOUT;]1"
+
+- task: UseDotNet@2
+  displayName: 'Use .NET SDK ${{ parameters.sdkVersion }}'
+  inputs:
+    packageType: 'sdk'
+    version: '${{ parameters.sdkVersion }}'
\ No newline at end of file
diff --git a/.build/azure-templates/run-tests-on-os.yml b/.build/azure-templates/run-tests-on-os.yml
index 0f975bf..9dfa28e 100644
--- a/.build/azure-templates/run-tests-on-os.yml
+++ b/.build/azure-templates/run-tests-on-os.yml
@@ -33,6 +33,7 @@ parameters:
   maximumParallelJobs: 8
   maximumAllowedFailures: 0
   where: '' # A test filter expression, as defined by dotnet vstest
+  dotNetSdkVersion: '' # The .NET SDK version to install
   
 steps:
 - checkout: none # self represents the repo where the initial Pipelines YAML file was found
@@ -54,6 +55,7 @@ steps:
     EnsureNotNullOrEmpty('${{ parameters.testResultsFileName }}', 'testResultsFileName')
     EnsureNotNullOrEmpty('${{ parameters.maximumParallelJobs }}', 'maximumParallelJobs')
     EnsureNotNullOrEmpty('${{ parameters.maximumAllowedFailures }}', 'maximumAllowedFailures')
+    EnsureNotNullOrEmpty('${{ parameters.dotNetSdkVersion }}', 'dotNetSdkVersion')
   displayName: 'Validate Template Parameters'
 
 
@@ -73,23 +75,9 @@ steps:
 
 #- pwsh: Get-ChildItem -Path $(System.DefaultWorkingDirectory) # Uncomment for debugging
 
-- task: UseDotNet@2
-  displayName: 'Use .NET Core sdk 3.1.412'
-  inputs:
-    version: 3.1.412
-  condition: and(succeeded(), contains('${{ parameters.framework }}', 'netcoreapp3.'))
-
-- task: UseDotNet@2
-  displayName: 'Use .NET sdk 5.0.400'
-  inputs:
-    version: 5.0.400
-  condition: and(succeeded(), contains('${{ parameters.testTargetFrameworks }}', 'net5.'))
-
-- task: UseDotNet@2
-  displayName: 'Use .NET sdk 6.0.100'
-  inputs:
-    packageType: 'sdk'
-    version: '6.0.100'
+- template: 'install-dotnet-sdk.yml'
+  parameters:
+    sdkVersion: '${{ parameters.dotNetSdkVersion }}'
 
 #- template: 'show-all-files.yml' # Uncomment for debugging
 - pwsh: |
diff --git a/.build/runbuild.ps1 b/.build/runbuild.ps1
index 2680a8a..a62d460 100644
--- a/.build/runbuild.ps1
+++ b/.build/runbuild.ps1
@@ -18,20 +18,20 @@
 # -----------------------------------------------------------------------------------
 
 properties {
-    [string]$base_directory   = Resolve-Path "../."
-    [string]$artifactsDirectory  = "$base_directory/_artifacts"
-    [string]$source_directory = "$base_directory"
-    [string]$tools_directory  = "$base_directory/lib"
-    [string]$nuget_package_directory = "$artifactsDirectory/NuGetPackages"
-    [string]$test_results_directory = "$artifactsDirectory/TestResults"
-    [string]$publish_directory = "$artifactsDirectory/Publish"
-    [string]$solutionFile = "$base_directory/Lucene.Net.sln"
+    [string]$baseDirectory   = Resolve-Path "../."
+    [string]$artifactsDirectory  = "$baseDirectory/_artifacts"
+    [string]$sourceDirectory = "$baseDirectory/src"
+    [string]$testDirectory = "$baseDirectory/src"
+    [string]$toolsDirectory  = "$baseDirectory/lib"
+    [string]$nugetPackageDirectory = "$artifactsDirectory/NuGetPackages"
+    [string]$testResultsDirectory = "$artifactsDirectory/TestResults"
+    [string]$publishDirectory = "$artifactsDirectory/Publish"
+    [string]$solutionFile = "$baseDirectory/Lucene.Net.sln"
     [string]$minimumSdkVersion = "6.0.100"
-    [string]$globalJsonFile = "$base_directory/global.json"
-    [string]$versionPropsFile = "$base_directory/version.props"
-    [string]$build_bat = "$base_directory/build.bat"
-    [string]$luceneReadmeFile = "$base_directory/src/Lucene.Net/readme-nuget.md"
-    [string]$luceneCLIReadmeFile = "$base_directory/src/dotnet/tools/lucene-cli/docs/index.md"
+    [string]$globalJsonFile = "$baseDirectory/global.json"
+    [string]$versionPropsFile = "$baseDirectory/version.props"
+    [string]$luceneReadmeFile = "$baseDirectory/src/Lucene.Net/readme-nuget.md"
+    [string]$luceneCLIReadmeFile = "$baseDirectory/src/dotnet/tools/lucene-cli/docs/index.md"
     [string]$rootWebsiteUrl = "https://lucenenet.apache.org"
     [string]$rootDocsWebsiteUrl = "$rootWebsiteUrl/docs"
 
@@ -42,23 +42,19 @@ properties {
     [string]$version          = Get-Version
     [string]$configuration    = $(if ($configuration) { $configuration } else { if ($env:BuildConfiguration) { $env:BuildConfiguration } else { "Release" } })  #NOTE: Pass in as a parameter (not a property) or environment variable to override
     [string]$platform   = $(if ($platform) { $platform } else { if ($env:BuildPlatform) { $env:BuildPlatform } else { "Any CPU" } })  #NOTE: Pass in as a parameter (not a property) or environment variable to override
-    [bool]$backup_files       = $true
+    [bool]$backupFiles       = $true
     [bool]$prepareForBuild    = $true
-    [bool]$generateBuildBat   = $false
     [bool]$zipPublishedArtifacts = $false
     [string]$publishedArtifactZipFileName = "artifact.zip"
 
-    [int]$maximumParalellJobs = 8
+    [int]$maximumParallelJobs = 8
     
-    #test paramters
-    [string]$frameworks_to_test = "net6.0,net5.0,netcoreapp3.1,net48,net461"
+    #test parameters
+    [string]$projectWithAllTestFrameworks = "$baseDirectory/src/Lucene.Net.Tests.Analysis.Common/Lucene.Net.Tests.Analysis.Common.csproj"
     [string]$where = ""
 }
 
 $backedUpFiles = New-Object System.Collections.ArrayList
-if ($IsWindows -eq $null) {
-    $IsWindows = $env:OS.StartsWith('Windows')
-}
 
 task default -depends Pack
 
@@ -66,7 +62,7 @@ task Clean -description "This task cleans up the build directory" {
     Write-Host "##teamcity[progressMessage 'Cleaning']"
     Write-Host "##vso[task.setprogress]'Cleaning'"
     Remove-Item $artifactsDirectory -Force -Recurse -ErrorAction SilentlyContinue
-    Get-ChildItem $base_directory -Include *.bak -Recurse | foreach ($_) {Remove-Item $_.FullName}
+    Get-ChildItem $baseDirectory -Include *.bak -Recurse | foreach ($_) {Remove-Item $_.FullName}
 }
 
 task UpdateLocalSDKVersion -description "Backs up the project.json file and pins the version to $minimumSdkVersion" {
@@ -94,21 +90,22 @@ task Init -depends CheckSDK, UpdateLocalSDKVersion -description "This task makes
     Write-Output "##myget[buildNumber '$packageVersion']"
     Write-Host "##vso[build.updatebuildnumber]$packageVersion"
 
-    & dotnet.exe --version
-    & dotnet.exe --info
-    Write-Host "Base Directory: $base_directory"
-    Write-Host "Release Directory: $artifactsDirectory"
-    Write-Host "Source Directory: $source_directory"
-    Write-Host "Tools Directory: $tools_directory"
-    Write-Host "NuGet Package Directory: $nuget_package_directory"
+    & dotnet --version
+    & dotnet --info
+    Write-Host "Base Directory: $(Normalize-FileSystemSlashes "$baseDirectory")"
+    Write-Host "Release Directory: $(Normalize-FileSystemSlashes "$artifactsDirectory")"
+    Write-Host "Source Directory: $(Normalize-FileSystemSlashes "$sourceDirectory")"
+    Write-Host "Test Directory: $(Normalize-FileSystemSlashes "$testDirectory")"
+    Write-Host "Tools Directory: $(Normalize-FileSystemSlashes "$toolsDirectory")"
+    Write-Host "NuGet Package Directory: $(Normalize-FileSystemSlashes "$nugetPackageDirectory")"
     Write-Host "BuildCounter: $buildCounter"
     Write-Host "PreReleaseCounterPattern: $preReleaseCounterPattern"
     Write-Host "VersionSuffix: $versionSuffix"
     Write-Host "Package Version: $packageVersion"
-    Write-Host "Version: $version"
+    Write-Host "File Version: $version"
     Write-Host "Configuration: $configuration"
     Write-Host "Platform: $platform"
-    Write-Host "MaximumParallelJobs: $($maximumParalellJobs.ToString())"
+    Write-Host "MaximumParallelJobs: $($maximumParallelJobs.ToString())"
     Write-Host "Powershell Version: $($PSVersionTable.PSVersion)"
 
     Ensure-Directory-Exists "$artifactsDirectory"
@@ -118,7 +115,7 @@ task Restore -description "This task restores the dependencies" {
     Write-Host "##teamcity[progressMessage 'Restoring']"
     Write-Host "##vso[task.setprogress]'Restoring'"
     Exec { 
-        & dotnet.exe restore $solutionFile --no-dependencies /p:TestFrameworks=true
+        & dotnet restore $solutionFile --no-dependencies /p:TestFrameworks=true
     }
 }
 
@@ -130,13 +127,9 @@ task Compile -depends Clean, Init, Restore -description "This task compiles the
             Prepare-For-Build
         }
 
-        $testFrameworks = [string]::Join(';', (Get-FrameworksToTest))
-
-        Write-Host "TestFrameworks set to: $testFrameworks" -ForegroundColor Green
-
         Exec {
             # NOTE: Version information is not passed in at the command line,
-            # instead it is output to the Version.props file. This file is then
+            # instead it is output to the version.props file. This file is then
             # used during a release to "freeze" the build at a specific version
             # so it is always a constant in release distributions.
             & dotnet build "$solutionFile" `
@@ -159,17 +152,17 @@ task Pack -depends Compile -description "This task creates the NuGet packages" {
     Write-Host "##teamcity[progressMessage 'Packing']"
     Write-Host "##vso[task.setprogress]'Packing'"
     #create the nuget package output directory
-    Ensure-Directory-Exists "$nuget_package_directory"
+    Ensure-Directory-Exists "$nugetPackageDirectory"
     Update-Lucene-Readme-For-Pack $packageVersion
     Update-LuceneCLI-Readme-For-Pack $packageVersion
 
     try {
         Exec {
             # NOTE: Package version information is not passed in at the command line,
-            # instead it is output to the Version.props file. This file is then
+            # instead it is output to the version.props file. This file is then
             # used during a release to "freeze" the build at a specific version
             # so it is always a constant in release distributions.
-            & dotnet.exe pack $solutionFile --configuration $configuration --output $nuget_package_directory --no-build
+            & dotnet pack $solutionFile --configuration $configuration --output $nugetPackageDirectory --no-build
         }
 
         $success = $true
@@ -177,7 +170,7 @@ task Pack -depends Compile -description "This task creates the NuGet packages" {
         #if ($success -ne $true) {
             Restore-Files $backedUpFiles
             #Remove Version.props, as we don't want it to be committed to the repository
-            if ($backup_files -eq $true -and (Test-Path -Path "$versionPropsFile") -eq $true) {
+            if ($backupFiles -eq $true -and (Test-Path -Path "$versionPropsFile") -eq $true) {
                 Remove-Item -Path "$versionPropsFile" -Force
             }
         #}
@@ -193,18 +186,18 @@ task Publish -depends Compile -description "This task uses dotnet publish to pac
 
     try {
         $frameworksToTest = Get-FrameworksToTest
-
+        
         if ($zipPublishedArtifacts) {
             $outDirectory = New-TemporaryDirectory
         } else {
-            $outDirectory = $publish_directory
+            $outDirectory = $publishDirectory
         }
         
         foreach ($framework in $frameworksToTest) {
 
             # Pause if we have queued too many parallel jobs
             $running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
-            if ($running.Count -ge $maximumParalellJobs) {
+            if ($running.Count -ge $maximumParallelJobs) {
                 $running | Wait-Job -Any | Out-Null
             }
 
@@ -245,9 +238,9 @@ task Publish -depends Compile -description "This task uses dotnet publish to pac
         #Get-Job | Receive-Job
 
         if ($zipPublishedArtifacts) {
-            Ensure-Directory-Exists $publish_directory
+            Ensure-Directory-Exists $publishDirectory
             Add-Type -assembly "System.IO.Compression.Filesystem"
-            [System.IO.Compression.ZipFile]::CreateFromDirectory($outDirectory, "$publish_directory/$publishedArtifactZipFileName")
+            [System.IO.Compression.ZipFile]::CreateFromDirectory($outDirectory, "$publishDirectory/$publishedArtifactZipFileName")
         }
 
         $success = $true
@@ -263,52 +256,51 @@ task Test -depends CheckSDK, UpdateLocalSDKVersion, Restore -description "This t
     Write-Host "##vso[task.setprogress]'Testing'"
     Write-Host "Running tests..." -ForegroundColor DarkCyan
 
-    pushd $base_directory
-    $testProjects = Get-ChildItem -Path "$source_directory/**/*.csproj" -Recurse | ? { $_.Directory.Name.Contains(".Tests") }
+    pushd $baseDirectory
+    $testProjects = Get-ChildItem -Path "$testDirectory/**/*.csproj" -Recurse | ? { $_.Directory.Name.Contains(".Tests") }
     popd
 
     $testProjects = $testProjects | Sort-Object -Property FullName
-
+    
     $frameworksToTest = Get-FrameworksToTest
 
-    Write-Host "frameworksToTest: $frameworksToTest" -ForegroundColor Yellow
-
     [int]$totalProjects = $testProjects.Length * $frameworksToTest.Length
     [int]$remainingProjects = $totalProjects
 
-    Ensure-Directory-Exists $test_results_directory
+    Ensure-Directory-Exists $testResultsDirectory
 
     foreach ($testProject in $testProjects) {
+        $testName = $testProject.Directory.Name
+        
+        # Call the target to get the configured test frameworks for this project. We only read the first line because MSBuild adds extra output.
+        $frameworksString = $(dotnet build "$testProject" --verbosity minimal --nologo --no-restore /t:PrintTargetFrameworks /p:TestProjectsOnly=true /p:TestFrameworks=true)[0].Trim()
 
-        foreach ($framework in $frameworksToTest) {
-            $testName = $testProject.Directory.Name
+        Write-Host ""
+        Write-Host "Frameworks To Test for ${testProject}: $frameworksString" -ForegroundColor Yellow
 
-            # Special case - our CLI tool only supports .NET 6.0
-            if ($testName.Contains("Tests.Cli") -and (!$framework.StartsWith("net6."))) {
-                $totalProjects--
-                $remainingProjects--
-                continue
-            }
-            
-            # Special case - OpenNLP.NET is only tested on .NET Framework 4.8
-            if ($testName.Contains("Tests.Analysis.OpenNLP") -and (!$framework.StartsWith("net48"))) {
-                $totalProjects--
-                $remainingProjects--
-                continue
-            }
+        if ($frameworksString -eq 'none') {
+            Write-Host ""
+            Write-Host "Skipping project '$testProject' because it is not marked with `<IsTestProject`>true`<`/IsTestProject`> and/or it contains no test frameworks for the current environment." -ForegroundColor DarkYellow
+            continue
+        }
 
-            # Special case - Code analysis is only tested on .NET 5
-            if ($testName.Contains("Tests.CodeAnalysis") -and (!$framework.StartsWith("net5."))) {
+        $frameworks = [System.Collections.Generic.HashSet[string]]::new($frameworksString -split '\s*;\s*')
+        foreach ($framework in $frameworksToTest) {
+            
+            # If the framework is not valid for this configuration, we need to adjust our
+            # initial estimate and skip the combination.
+            if (-not $frameworks.Contains($framework)) {
                 $totalProjects--
                 $remainingProjects--
                 continue
             }
-
+            
+            Write-Host ""
             Write-Host "  Next Project in Queue: $testName, Framework: $framework" -ForegroundColor Yellow
 
             # Pause if we have queued too many parallel jobs
             $running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
-            if ($running.Count -ge $maximumParalellJobs) {
+            if ($running.Count -ge $maximumParallelJobs) {
                 Write-Host ""
                 Write-Host "  Running tests in parallel on $($running.Count) projects out of approximately $totalProjects total." -ForegroundColor Cyan
                 Write-Host "  $remainingProjects projects are waiting in the queue to run. This will take a bit, please wait..." -ForegroundColor Cyan
@@ -316,11 +308,11 @@ task Test -depends CheckSDK, UpdateLocalSDKVersion, Restore -description "This t
             }
             $remainingProjects -= 1
 
-            $testResultDirectory = "$test_results_directory/$framework/$testName"
+            $testResultDirectory = "$testResultsDirectory/$framework/$testName"
             Ensure-Directory-Exists $testResultDirectory
 
             $testProjectPath = $testProject.FullName
-            $testExpression = "dotnet.exe test $testProjectPath --configuration $configuration --framework $framework --no-build"
+            $testExpression = "dotnet test $testProjectPath --configuration $configuration --framework $framework --no-build"
             $testExpression = "$testExpression --no-restore --blame  --blame-hang --blame-hang-dump-type mini --blame-hang-timeout 15minutes --results-directory $testResultDirectory"
 
             # Breaking change: We need to explicitly set the logger for it to work with TeamCity.
@@ -353,7 +345,7 @@ task Test -depends CheckSDK, UpdateLocalSDKVersion, Restore -description "This t
             #Invoke-Expression $testExpression
             ## fail the build on negative exit codes (NUnit errors - if positive it is a test count or, if 1, it could be a dotnet error)
             #if ($LASTEXITCODE -lt 0) {
-            #	throw "Test execution failed"
+            #   throw "Test execution failed"
             #}
         }
     }
@@ -386,7 +378,7 @@ function Get-Package-Version() {
         return $env:PackageVersion
     } else {
         #Get the version info
-        $versionFile = "$base_directory/Directory.Build.props"
+        $versionFile = "$baseDirectory/Directory.Build.props"
         $xml = [xml](Get-Content $versionFile)
 
         $versionPrefix = ([string]$xml.Project.PropertyGroup.VersionPrefix).Trim()
@@ -421,16 +413,11 @@ function Get-Version() {
 }
 
 function Get-FrameworksToTest() {
-    $frameworksToTest = New-Object Collections.Generic.List[string]
-    $frameworks = $frameworks_to_test -split "\s*?,\s*?"
-    foreach ($framework in $frameworks) {
-        if ($IsWindows) {
-            $frameworksToTest.Add($framework)
-        } elseif ($framework.StartsWith('netcore') -or $framework.StartsWith('net5.') -or $framework.StartsWith('net6.')) {
-            $frameworksToTest.Add($framework)
-        }
-    }
-    return [System.Linq.Enumerable]::ToArray($frameworksToTest)
+    # Call the target to get the configured test frameworks for a project known to contain all of them. We only read the first line because MSBuild adds extra output.
+    $frameworksString = $(dotnet build "$projectWithAllTestFrameworks" --verbosity minimal --nologo --no-restore /t:PrintTargetFrameworks /p:TestProjectsOnly=true /p:TestFrameworks=true)[0].Trim()
+    $frameworksToTest = $frameworksString -split '\s*;\s*'
+    Assert($frameworksToTest.Length -gt 0) "The project at $(Normalize-FileSystemSlashes "$projectWithAllTestFrameworks") contains no target frameworks. Please configure a project that includes all testable target frameworks."
+    return $frameworksToTest
 }
 
 function Prepare-For-Build() {
@@ -443,10 +430,10 @@ function Prepare-For-Build() {
     Write-Host "Assembly version set to: $assemblyVersion" -ForegroundColor Green
 
     $informationalVersion = $packageVersion
-    #check for presense of Git
-    & where.exe git.exe
+
+    # Only update the version if git is present and the command to read the commit succeeds
+    $gitCommit = ((git rev-parse --verify --short=10 head) | Out-String).Trim()
     if ($LASTEXITCODE -eq 0) {
-        $gitCommit = ((git rev-parse --verify --short=10 head) | Out-String).Trim()
         $informationalVersion = "$packageVersion commit:[$gitCommit]"
     }
 
@@ -464,15 +451,10 @@ function Prepare-For-Build() {
         -PackageVersion $packageVersion `
         -File $versionPropsFile
     Update-Constants-Version $packageVersion
-
-    if ($generateBuildBat -eq $true) {
-        Backup-File $build_bat
-        Generate-Build-Bat $build_bat
-    }
 }
 
 function Update-Constants-Version([string]$version) {
-    $constantsFile = "$base_directory/src/Lucene.Net/Util/Constants.cs"
+    $constantsFile = "$baseDirectory/src/Lucene.Net/Util/Constants.cs"
 
     Backup-File $constantsFile
     (Get-Content $constantsFile) | % {
@@ -520,7 +502,7 @@ $fileText = "{
     $dir = [System.IO.Path]::GetDirectoryName($file)
     Ensure-Directory-Exists $dir
 
-    Write-Host "Generating global.json file: $file"
+    Write-Host "Generating global.json file: $(Normalize-FileSystemSlashes "$file")"
     Out-File -filePath $file -encoding UTF8 -inputObject $fileText
 }
 
@@ -560,92 +542,10 @@ $fileText = "<!--
     $dir = [System.IO.Path]::GetDirectoryName($file)
     Ensure-Directory-Exists $dir
 
-    Write-Host "Generating Version.props file: $file"
+    Write-Host "Generating version.props file: $(Normalize-FileSystemSlashes "$file")"
     Out-File -filePath $file -encoding UTF8 -inputObject $fileText
 }
 
-function Generate-Build-Bat {
-param(
-    [string]$file = $(throw "file is a required parameter.")
-)
-  $buildBat = "
-@echo off
-GOTO endcommentblock
-:: -----------------------------------------------------------------------------------
-::
-:: Licensed to the Apache Software Foundation (ASF) under one or more
-:: contributor license agreements.  See the NOTICE file distributed with
-:: this work for additional information regarding copyright ownership.
-:: The ASF licenses this file to You under the Apache License, Version 2.0
-:: (the ""License""); you may not use this file except in compliance with
-:: the License.  You may obtain a copy of the License at
-:: 
-:: http://www.apache.org/licenses/LICENSE-2.0
-:: 
-:: Unless required by applicable law or agreed to in writing, software
-:: distributed under the License is distributed on an ""AS IS"" BASIS,
-:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-:: See the License for the specific language governing permissions and
-:: limitations under the License.
-::
-:: -----------------------------------------------------------------------------------
-::
-:: This file will build Lucene.Net and create the NuGet packages.
-::
-:: Syntax:
-::   build[.bat] [<options>]
-::
-:: Available Options:
-::
-::   --Test
-::   -t - Run the tests.
-::
-::   --MaximumParallelJobs
-::   -mp - Set the maxumum number of parallel jobs to run during testing. If not supplied, the default is 8.
-::
-:: -----------------------------------------------------------------------------------
-:endcommentblock
-setlocal enabledelayedexpansion enableextensions
-set runtests=false
-set maximumParallelJobs=8
-FOR %%a IN (%*) DO (
-    FOR /f ""useback tokens=*"" %%a in ('%%a') do (
-        set value=%%~a
-        
-        set test=!value:~0,2!
-        IF /I !test!==-t (
-            set runtests=true
-        )
-        set test=!value:~0,6!
-        IF /I !test!==--test (
-            set runtests=true
-        )
-        set test=!value:~0,4!
-        IF /I !test!==-mp: (
-            set maximumParallelJobs=!value:~4!
-        )
-        set test=!value:~0,22!
-        IF /I !test!==--maximumparalleljobs: (
-            set maximumParallelJobs=!value:~22!
-        )
-    )
-)
-set tasks=""Default""
-if ""!runtests!""==""true"" (
-    set tasks=""Default,Test""
-)
-powershell -ExecutionPolicy Bypass -Command ""& { Import-Module .\.build\psake.psm1; Invoke-Psake .\.build\runbuild.ps1 -Task %tasks% -properties @{prepareForBuild='false';backup_files='false';maximumParalellJobs=%maximumParallelJobs%} }""
-endlocal
-"
-    $dir = [System.IO.Path]::GetDirectoryName($file)
-    Ensure-Directory-Exists $dir
-
-    Write-Host "Generating build.bat file: $file"
-    #Out-File -filePath $file -encoding UTF8 -inputObject $buildBat -Force
-    $Utf8EncodingNoBom = New-Object System.Text.UTF8Encoding $false
-    [System.IO.File]::WriteAllLines($file, $buildBat, $Utf8EncodingNoBom)
-}
-
 function New-CountersObject ([string]$project, [string]$outcome, [int]$total, [int]$executed, [int]$passed, [int]$failed, [int]$warning, [int]$inconclusive) {
     $counters = New-Object -TypeName PSObject
     $fields = [ordered]@{Project=$project;Outcome=$outcome;Total=$total;Executed=$executed;Passed=$passed;Failed=$failed;Warning=$warning;Inconclusive=$inconclusive}
@@ -655,9 +555,15 @@ function New-CountersObject ([string]$project, [string]$outcome, [int]$total, [i
 
 function Summarize-Test-Results([string[]]$frameworksToTest) {
 
+    # Workaround for issue when ForeGroundColor cannot be read. https://stackoverflow.com/a/26583010
+    $defaultForeground = (Get-Host).UI.RawUI.ForegroundColor
+    if ($defaultForeground -eq -1) {
+        $defaultForeground = 'White'
+    }
+
     foreach ($framework in $frameworksToTest) {
-        pushd $base_directory
-        $testReports = Get-ChildItem -Path "$test_results_directory/$framework" -Recurse -File -Filter "*.trx" | ForEach-Object {
+        pushd $baseDirectory
+        $testReports = Get-ChildItem -Path "$testResultsDirectory/$framework" -Recurse -File -Filter "*.trx" | ForEach-Object {
             $_.FullName
         }
         popd
@@ -745,16 +651,16 @@ function Summarize-Test-Results([string[]]$frameworksToTest) {
         Write-Host ""
         Write-Host "Total: $totalCountForFramework"
         Write-Host "Executed: $executedCountForFramework"
-        $foreground = if ($failedCountForFramework -gt 0) { 'Green' } else { (Get-Host).UI.RawUI.ForegroundColor }
+        $foreground = if ($failedCountForFramework -gt 0) { 'Green' } else { $defaultForeground }
         Write-Host "Passed: " -NoNewline; Write-Host "$passedCountForFramework" -ForegroundColor $foreground
-        $foreground = if ($failedCountForFramework -gt 0) { 'Red' } else { (Get-Host).UI.RawUI.ForegroundColor }
+        $foreground = if ($failedCountForFramework -gt 0) { 'Red' } else { $defaultForeground }
         Write-Host "Failed: " -NoNewline; Write-Host "$failedCountForFramework" -ForegroundColor $foreground
-        $foreground = if ($failedCountForFramework -gt 0) { 'Yellow' } else { (Get-Host).UI.RawUI.ForegroundColor }
+        $foreground = if ($failedCountForFramework -gt 0) { 'Yellow' } else { $defaultForeground }
         Write-Host "Warning: " -NoNewline; Write-Host "$warningCountForFramework" -ForegroundColor $foreground
-        $foreground = if ($failedCountForFramework -gt 0) { 'Cyan' } else { (Get-Host).UI.RawUI.ForegroundColor }
+        $foreground = if ($failedCountForFramework -gt 0) { 'Cyan' } else { $defaultForeground }
         Write-Host "Inconclusive: " -NoNewline; Write-Host "$inconclusiveCountForFramework" -ForegroundColor $foreground
         Write-Host ""
-        Write-Host "See the .trx logs in $test_results_directory/$framework for more details." -ForegroundColor DarkCyan
+        Write-Host "See the .trx logs in $(Normalize-FileSystemSlashes "$testResultsDirectory/$framework") for more details." -ForegroundColor DarkCyan
     }
 }
 
@@ -765,7 +671,7 @@ function Backup-Files([string[]]$paths) {
 }
 
 function Backup-File([string]$path) {
-    if ($backup_files -eq $true) {
+    if ($backupFiles -eq $true) {
         Copy-Item $path "$path.bak" -Force
         $backedUpFiles.Insert(0, $path)
     } else {
@@ -780,7 +686,7 @@ function Restore-Files([string[]]$paths) {
 }
 
 function Restore-File([string]$path) {
-    if ($backup_files -eq $true) {
+    if ($backupFiles -eq $true) {
         if (Test-Path "$path.bak") {
             Move-Item "$path.bak" $path -Force
         }
@@ -798,4 +704,9 @@ function New-TemporaryDirectory {
     $parent = [System.IO.Path]::GetTempPath()
     [string] $name = [System.Guid]::NewGuid()
     New-Item -ItemType Directory -Path (Join-Path $parent $name)
+}
+
+function Normalize-FileSystemSlashes([string]$path) {
+    $sep = [System.IO.Path]::DirectorySeparatorChar
+    return $($path -replace '/',$sep -replace '\\',$sep)
 }
\ No newline at end of file
diff --git a/Directory.Build.targets b/Directory.Build.targets
index 79b4b8d..d7c6e22 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -137,6 +137,17 @@
     </ItemGroup>
   </Target>
 
+  <Target Name="PrintTargetFrameworks" Label="Prints the value for the $(TargetFrameworks) property or 'none' if no frameworks apply. Pass TestProjectsOnly=true to get results only if this is a test project.">
+    <PropertyGroup>
+      <DoOutputTargetFrameworks Condition=" '$(TestProjectsOnly)' != 'true' Or ('$(TestProjectsOnly)' == 'true' And '$(IsTestProject)' == 'true')">true</DoOutputTargetFrameworks>
+      <OutputTargetFrameworks Condition=" '$(DoOutputTargetFrameworks)' == 'true' ">$(TargetFramework)</OutputTargetFrameworks>
+      <!-- Fallback to TargetFrameworks field if TargetFramework is empty -->
+      <OutputTargetFrameworks Condition=" '$(DoOutputTargetFrameworks)' == 'true' And '$(OutputTargetFrameworks)' == '' ">$(TargetFrameworks)</OutputTargetFrameworks>
+      <OutputTargetFrameworks Condition=" '$(OutputTargetFrameworks)' == '' ">none</OutputTargetFrameworks>
+    </PropertyGroup>
+    <Message Text="$(OutputTargetFrameworks)" Importance="high"/>
+  </Target>
+
   <!-- Global PackageReferences -->
   <ItemGroup>
     <!-- This is to allow the .NET Framework references to be machine-indepenedent so builds can happen without installing prerequisites -->
diff --git a/Lucene.Net.sln b/Lucene.Net.sln
index c80f1ab..e3a427b 100644
--- a/Lucene.Net.sln
+++ b/Lucene.Net.sln
@@ -20,6 +20,7 @@ VisualStudioVersion = 16.0.29806.167
 MinimumVisualStudioVersion = 15.0.26730.8
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "azure-templates", "azure-templates", "{05CE3A39-40D4-452D-AFE0-E57E536A08C6}"
 	ProjectSection(SolutionItems) = preProject
+		.build\azure-templates\install-dotnet-sdk.yml = .build\azure-templates\install-dotnet-sdk.yml
 		.build\azure-templates\publish-nuget-packages.yml = .build\azure-templates\publish-nuget-packages.yml
 		.build\azure-templates\publish-test-binaries.yml = .build\azure-templates\publish-test-binaries.yml
 		.build\azure-templates\publish-test-results-for-test-projects.yml = .build\azure-templates\publish-test-results-for-test-projects.yml
@@ -37,7 +38,9 @@ EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".build", ".build", "{4016BDAB-6C33-4D1E-9439-57B416EA45D5}"
 	ProjectSection(SolutionItems) = preProject
 		azure-pipelines.yml = azure-pipelines.yml
+		build = build
 		build.bat = build.bat
+		build.ps1 = build.ps1
 		.build\runbuild.ps1 = .build\runbuild.ps1
 		.build\dependencies.props = .build\dependencies.props
 		.build\nuget.props = .build\nuget.props
diff --git a/README.md b/README.md
index 93a2b11..579a548 100644
--- a/README.md
+++ b/README.md
@@ -171,25 +171,35 @@ Before you start working on a pull request, please read our [Contributing](https
 
 ### Command Line
 
-Building on the Command Line is currently only supported on Windows.
-
 ##### Prerequisites
 
-1. [Powershell](https://msdn.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell) 3.0 or higher (see [this question](http://stackoverflow.com/questions/1825585/determine-installed-powershell-version) to check your Powershell version)
+1. [PowerShell](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell) 3.0 or higher (see [this question](http://stackoverflow.com/questions/1825585/determine-installed-powershell-version) to check your PowerShell version)
 2. [.NET 6.0 SDK or higher](https://dotnet.microsoft.com/download/visual-studio-sdks)
 
 ##### Execution
 
 > **NOTE:** If the project is open in Visual Studio, its background restore may interfere with these commands. It is recommended to close all instances of Visual Studio that have `Lucene.Net.sln` open before executing.
 
-To build the source, clone or download and unzip the repository. From the repository root, execute the `build.bat` file from a command prompt and include the desired options from the build options table below:
+To build the source, clone or download and unzip the repository. For specific releases, download and unzip the `.src.zip` file from the [download page of the specific version](https://lucenenet.apache.org/download/download.html). From the repository or distribution root, execute the **build** command from a command prompt and include the desired options from the build options table below:
+
+###### Windows
 
 ```
 > build [options]
 ```
 
+###### Linux or macOS
+
+```
+./build [options]
+```
+
+> **NOTE:** The `build` file will need to be given permission to run using the command `chmod u+x build` before the first execution.
+
 ##### Build Options
 
+The following options are case-insensitive. Each option has both a short form indicated by a single `-` and a long form indicated by `--`. The options that require a value must be followed by a space and then the value, similar to running the [dotnet CLI](https://docs.microsoft.com/en-us/dotnet/core/tools/).
+
 <table>
     <tr>
         <th>Short</th>
@@ -199,43 +209,51 @@ To build the source, clone or download and unzip the repository. From the reposi
     </tr>
     <tr>
         <td>&#8209;config</td>
-        <td>&#8209;&#8209;Configuration</td>
+        <td>&#8209;&#8209;configuration</td>
         <td>The build configuration ("Release" or "Debug").</td>
-        <td>build&nbsp;&#8209;&#8209;Configuration:Debug</td>
+        <td>build&nbsp;&#8209;&#8209;configuration Debug</td>
     </tr>
     <tr>
         <td>&#8209;mp</td>
-        <td>&#8209;&#8209;MaximumParallelJobs</td>
+        <td>&#8209;&#8209;maximum-parallel-jobs</td>
         <td>The maximum number of parallel jobs to run during testing. If not supplied, the default is 8.</td>
-        <td>build&nbsp;&#8209;t&nbsp;&#8209;mp:10</td>
+        <td>build&nbsp;&#8209;t&nbsp;&#8209;mp 10</td>
     </tr>
     <tr>
         <td>&#8209;pv</td>
-        <td>&#8209;&#8209;PackageVersion</td>
+        <td>&#8209;&#8209;package-version</td>
         <td>The NuGet package version. If not supplied, will use the version from the Version.proj file.</td>
-        <td>build&nbsp;&#8209;pv:4.8.0&#8209;beta00001</td>
+        <td>build&nbsp;&#8209;pv 4.8.0&#8209;beta00001</td>
     </tr>
     <tr>
         <td>&#8209;t</td>
-        <td>&#8209;&#8209;Test</td>
-        <td>Runs the tests after building. Note that testing typically takes around 40 minutes with 8 parallel jobs.</td>
+        <td>&#8209;&#8209;test</td>
+        <td>Runs the tests after building. This option does not require a value. Note that testing typically takes around 40 minutes with 8 parallel jobs.</td>
         <td>build&nbsp;&#8209;t</td>
     </tr>
     <tr>
-        <td>&#8209;v</td>
-        <td>&#8209;&#8209;Version</td>
-        <td>The assembly file version. If not supplied, will use the PackageVersion (excluding any pre-release tag).</td>
-        <td>build&nbsp;&#8209;pv:4.8.0&#8209;beta00001&nbsp;&#8209;v:4.8.0</td>
+        <td>&#8209;fv</td>
+        <td>&#8209;&#8209;file-version</td>
+        <td>The assembly file version. If not supplied, will use the --package-version (excluding any pre-release tag). The assembly version is generated as the major version of this value without the minor, build, or revision compoenents.</td>
+        <td>build&nbsp;&#8209;pv 4.8.0&#8209;beta00001&nbsp;&#8209;fv 4.8.0</td>
     </tr>
 </table>
 
-For example the following command creates a Release build with NuGet package version 4.8.0‑ci00015 and assembly file version 4.8.0:
+For example the following command creates a Release build with NuGet package version 4.8.0‑ci00015 and file version 4.8.0. Assembly version will be equal to the passed in major version (in this case 4.0.0).
+
+###### Windows
+
+```
+> build ‑‑configuration Release ‑pv 4.8.0‑ci00015 ‑fv 4.8.0
+```
+
+###### Linux or macOS
 
 ```
-> build ‑‑Configuration:Release ‑pv:4.8.0‑ci00015 ‑v:4.8.0
+./build ‑‑configuration Release ‑pv 4.8.0‑ci00015 ‑fv 4.8.0
 ```
 
-In the above example we are using "ci" in the package version to indicate this is not a publically released beta version but rather the ouput of a continuous integration build from master which occured after beta00014 but before beta00015 was released.  
+In the above example we are using "ci" in the package version to indicate this is not a publicly released beta version but rather the output of a continuous integration build from master which occurred after beta00014 but before beta00015 was released.
 
 NuGet packages are output by the build to the `/_artifacts/NuGetPackages/` directory. Test results (if applicable) are output to the `/_artifacts/TestResults/` directory.
 
diff --git a/TestTargetFramework.props b/TestTargetFramework.props
index 88c4d5d..fd7e237 100644
--- a/TestTargetFramework.props
+++ b/TestTargetFramework.props
@@ -49,6 +49,10 @@
     <IsPublishable>true</IsPublishable>
   </PropertyGroup>
 
+  <PropertyGroup Label="Test Settings">
+    <IsTestProject>true</IsTestProject>
+  </PropertyGroup>
+
   <PropertyGroup Label="Warnings to be Disabled in Test Projects">
     <NoWarn Label="Nested types should not be visible">$(NoWarn);CA1034</NoWarn>
     <NoWarn Label="Use Literals Where Appropriate">$(NoWarn);CA1802</NoWarn>
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index a24ca7c..a530ac4 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -54,7 +54,7 @@ name: 'vNext$(rev:.r)' # Format for build number (will be overridden)
 variables:
 - name: BuildCounter
   value: $[counter(variables['VersionSuffix'],coalesce(variables['BuildCounterSeed'], 1250))]
-- name: BuildSDKVersion
+- name: DotNetSDKVersion
   value: '6.0.100'
 - name: DocumentationArtifactName
   value: 'docs'
@@ -122,29 +122,24 @@ stages:
         Write-Host "##vso[task.setvariable variable=RunPack;]$runPack"
       displayName: 'Setup Default Variable Values'
 
-    - task: UseDotNet@2
-      displayName: 'Use .NET Core sdk $(BuildSDKVersion)'
-      inputs:
-        packageType: 'sdk'
-        version: '$(BuildSDKVersion)'
+    - template: '.build/azure-templates/install-dotnet-sdk.yml'
+      parameters:
+        sdkVersion: '$(DotNetSDKVersion)'
 
     - pwsh: |
         Import-Module "$(BuildDirectory)/psake/psake.psm1"
-        $generateBuildBat = $env:ISRELEASE
         $primaryCommand = if ($env:RUNPACK -ne 'false') { 'Pack' } else { 'Compile' }
         $parameters = @{}
         $properties = @{
-            backup_files='false';
-            publish_directory='$(PublishTempDirectory)';
-            nuget_package_directory='$(NuGetArtifactDirectory)';
-            # Lock the build.bat so it only builds this version in the release distribution
-            generateBuildBat=$generateBuildBat
+            backupFiles='false';
+            publishDirectory='$(PublishTempDirectory)';
+            nugetPackageDirectory='$(NuGetArtifactDirectory)'
         }
         [string[]]$tasks = @($primaryCommand)
         if ($env:RunTests -ne 'false') {
             [string[]]$tasks = $primaryCommand,'Publish'
         }
-        Invoke-psake $(BuildDirectory)/runbuild.ps1 -Task $tasks -properties $properties -parameters $parameters
+        Invoke-Psake $(BuildDirectory)/runbuild.ps1 -Task $tasks -properties $properties -parameters $parameters
         exit !($psake.build_success)
       displayName: 'PSake Build, Pack, and Publish'
 
@@ -360,6 +355,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net6_0_x86 # Only run Nightly or if explicitly enabled with RunX86Tests
     condition: and(succeeded(), ne(variables['RunTests'], 'false'), or(eq(variables['IsNightly'], 'true'), eq(variables['RunX86Tests'], 'true')))
@@ -394,6 +390,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net5_0_x64
     condition: and(succeeded(), ne(variables['RunTests'], 'false'))
@@ -428,6 +425,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net5_0_x86 # Only run Nightly or if explicitly enabled with RunX86Tests
     condition: and(succeeded(), ne(variables['RunTests'], 'false'), or(eq(variables['IsNightly'], 'true'), eq(variables['RunX86Tests'], 'true')))
@@ -462,6 +460,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_netcoreapp3_1_x64
     condition: and(succeeded(), ne(variables['RunTests'], 'false'))
@@ -496,6 +495,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_netcoreapp3_1_x86 # Only run Nightly or if explicitly enabled with RunX86Tests
     condition: and(succeeded(), ne(variables['RunTests'], 'false'), or(eq(variables['IsNightly'], 'true'), eq(variables['RunX86Tests'], 'true')))
@@ -530,6 +530,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net461_x64
     condition: and(succeeded(), ne(variables['RunTests'], 'false'))
@@ -554,6 +555,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net461_x86 # Only run Nightly or if explicitly enabled with RunX86Tests
     condition: and(succeeded(), ne(variables['RunTests'], 'false'), or(eq(variables['IsNightly'], 'true'), eq(variables['RunX86Tests'], 'true')))
@@ -578,6 +580,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: $(maximumParallelJobs)
         maximumAllowedFailures: $(maximumAllowedFailures)
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net48_Windows_x64
     condition: and(succeeded(), ne(variables['RunTests'], 'false'))
@@ -595,6 +598,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: 8
         maximumAllowedFailures: 0 # Maximum allowed failures for a successful build
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
   - job: Test_net48_Windows_x86 # Only run Nightly or if explicitly enabled with RunX86Tests
     condition: and(succeeded(), ne(variables['RunTests'], 'false'), or(eq(variables['IsNightly'], 'true'), eq(variables['RunX86Tests'], 'true')))
@@ -612,6 +616,7 @@ stages:
         testResultsArtifactName: '$(TestResultsArtifactName)'
         maximumParallelJobs: 8
         maximumAllowedFailures: 0 # Maximum allowed failures for a successful build
+        dotNetSdkVersion: '$(DotNetSDKVersion)'
 
 
 - stage: Publish_Stage
diff --git a/build b/build
new file mode 100644
index 0000000..5c93df5
--- /dev/null
+++ b/build
@@ -0,0 +1,55 @@
+#! /usr/bin/env bash
+# -----------------------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the ""License""); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an ""AS IS"" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# -----------------------------------------------------------------------------------
+#
+# This file will build Lucene.Net and create the NuGet packages.
+#
+# Syntax:
+#   build[.bat] [<options>]
+#
+# Available Options:
+#
+#   --file-version <FileVersion>
+#   -fv <FileVersion> - File version number. If not supplied, the file version will be the same
+#                  as PackageVersion (excluding any pre-release tag). This value is not allowed
+#                  if there is a version.props file (which is included in the release distribution).
+#
+#   --package-version <PackageVersion>
+#   -pv <PackageVersion> - Nuget package version. Default is the value defined in Directory.Build.props.
+#                  This value is not allowed if there is a version.props file (which is included in the
+#                  release distribution).
+#
+#   --configuration <Configuration>
+#   -config <Configuration> - MSBuild configuration for the build.
+#
+#   --test
+#   -t - Run the tests.
+#
+#   --maximum-parallel-jobs
+#   -mp - Set the maxumum number of parallel jobs to run during testing. If not supplied, the default is 8.
+#
+#   All options are case insensitive.
+#
+# -----------------------------------------------------------------------------------
+if ! command -v pwsh &> /dev/null
+then
+    echo "Powershell Core could not be found. Please install version 3 or higher."
+    exit
+fi
+pwsh -ExecutionPolicy bypass -Command "& './build.ps1'" "$@"
\ No newline at end of file
diff --git a/build.bat b/build.bat
index 856cce7..a6e5a63 100644
--- a/build.bat
+++ b/build.bat
@@ -26,109 +26,28 @@ GOTO endcommentblock
 ::
 :: Available Options:
 ::
-::   --Version:<Version>
-::   -v:<Version> - Assembly version number. If not supplied, the version will be the same 
-::                  as PackageVersion (excluding any pre-release tag).
+::   --file-version <FileVersion>
+::   -fv <FileVersion> - File version number. If not supplied, the file version will be the same
+::                  as PackageVersion (excluding any pre-release tag). This value is not allowed
+::                  if there is a version.props file (which is included in the release distribution).
 ::
-::   --PackageVersion:<PackageVersion>
-::   -pv:<PackageVersion> - Nuget package version. Default is 0.0.0, which instructs the script to use the value in Version.proj.
+::   --package-version <PackageVersion>
+::   -pv <PackageVersion> - Nuget package version. Default is the value defined in Directory.Build.props.
+::                  This value is not allowed if there is a version.props file (which is included in the
+::                  release distribution).
 ::
-::   --Configuration:<Configuration>
-::   -config:<Configuration> - MSBuild configuration for the build.
+::   --configuration <Configuration>
+::   -config <Configuration> - MSBuild configuration for the build.
 ::
-::   --Test
+::   --test
 ::   -t - Run the tests.
 ::
-::   --MaximumParallelJobs
+::   --maximum-parallel-jobs
 ::   -mp - Set the maxumum number of parallel jobs to run during testing. If not supplied, the default is 8.
 ::
 ::   All options are case insensitive.
 ::
-::   To escape any of the options, put double quotes around the entire value, like this:
-::   "-config:Release"
-::
 :: -----------------------------------------------------------------------------------
 :endcommentblock
-setlocal enabledelayedexpansion enableextensions
-
-REM Default values
-IF "%version%" == "" (
-	REM  If version is not supplied, our build script should parse it
-	REM  from the %PackageVersion% variable. We determine this by checking
-	REM  whether it is 0.0.0 (uninitialized).
- 	set version=0.0.0
-)
-IF "%PackageVersion%" == "" (
-    set PackageVersion=0.0.0
-)
-set configuration=Release
-IF NOT "%config%" == "" (
- 	set configuration=%config%
-)
-set runtests=false
-set maximumParallelJobs=8
-
-FOR %%a IN (%*) DO (
-	FOR /f "useback tokens=*" %%a in ('%%a') do (
-		set value=%%~a
-
-		set test=!value:~0,3!
-		IF /I !test! EQU -v: (
-			set version=!value:~3!
-		)
-
-		set test=!value:~0,10!
-		IF /I !test! EQU --version: (
-			set version=!value:~10!
-		)
-		
-		set test=!value:~0,4!
-		IF /I !test!==-pv: (
-			set packageversion=!value:~4!
-		)
-
-		set test=!value:~0,17!
-		IF /I !test!==--packageversion: (
-			set packageversion=!value:~17!
-		)
-
-		set test=!value:~0,8!
-		IF /I !test!==-config: (
-			set configuration=!value:~8!
-		)
-
-		set test=!value:~0,16!
-		IF /I !test!==--configuration: (
-			set configuration=!value:~16!
-		)
-		
-		set test=!value:~0,2!
-		IF /I !test!==-t (
-			set runtests=true
-		)
-
-		set test=!value:~0,6!
-		IF /I !test!==--test (
-			set runtests=true
-		)
-
-		set test=!value:~0,4!
-		IF /I !test!==-mp: (
-			set maximumParallelJobs=!value:~4!
-		)
-
-		set test=!value:~0,22!
-		IF /I !test!==--maximumparalleljobs: (
-			set maximumParallelJobs=!value:~22!
-		)
-	)
-)
-
-set tasks="Default"
-if "!runtests!"=="true" (
-	set tasks="Default,Test"
-)
-
-powershell -ExecutionPolicy Bypass -Command "& { Import-Module .\.build\psake\psake.psm1; Invoke-Psake .\.build\runbuild.ps1 %tasks% -properties @{configuration='%configuration%';maximumParalellJobs=%maximumParallelJobs%} -parameters @{ packageVersion='%PackageVersion%';version='%version%' } }"
-
-endlocal
+where pwsh >nul 2>nul
+if %ERRORLEVEL% NEQ 0 (echo "Powershell could not be found. Please install version 3 or higher.") else (pwsh -ExecutionPolicy bypass -Command "& '%~dpn0.ps1'" %*)
\ No newline at end of file
diff --git a/build.ps1 b/build.ps1
new file mode 100644
index 0000000..ed490e3
--- /dev/null
+++ b/build.ps1
@@ -0,0 +1,96 @@
+# Parses and validates the command arguments and bootstraps the Psake build script with the cleaned values
+
+# -----------------------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the ""License""); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an ""AS IS"" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# -----------------------------------------------------------------------------------
+
+function Get-NextArg([string[]]$arguments, [int]$i, [string]$argName) {
+    $i++
+    if ($arguments.Length -gt $i -and -not $($arguments[$i]).StartsWith('-')) {
+        return $arguments[$i]
+    } else {
+        throw $("'$argName' requires a value to be passed as the next argument.")
+    }
+}
+
+# Default values, if not supplied as args
+[string]$packageVersion = ''
+[string]$fileVersion = ''
+[string]$configuration = 'Release'
+[bool]$runTests = $false
+[int]$maximumParallelJobs = 8
+
+# If the version.props file exists at the repository root, it is used to "lock" the version
+# to the current release (this happens in the official release distribution at
+# https://dist.apache.org/repos/dist/release/lucenenet/). In this case, we will not process
+# any version values that are passed, and the user will get an error. Note we don't do any
+# validation to ensure it has the values we need to produce a build (that part is automated
+# as part of the release).
+[string]$versionPropsFile = "$PSScriptRoot/version.props"
+[bool]$versionPropsExists = Test-Path $versionPropsFile
+
+# Analyze the args that were passed and process them
+for ([int]$i = 0; $i -lt $args.Length; $i++) {
+    $arg = $args[$i]
+    $loweredArg =  "$arg".ToLowerInvariant()
+    
+    if ($loweredArg -eq '-t' -or $loweredArg -eq '--test') {
+        $runTests = $true
+    } elseif ($loweredArg -eq '-mp' -or $loweredArg -eq '--maximum-parallel-jobs' -or $loweredArg -eq '--maximumparalleljobs') {
+        [string]$mpjStr = Get-NextArg $args $i $arg
+        [int]$mpjInt = $null
+        if (-not [int]::TryParse($mpjStr, [ref]$mpjInt)) { throw $("The '$arg' value must be a 32 bit integer. Got: $mpjStr.") }
+        $maximumParallelJobs = $mpjInt
+        $i++
+    } elseif ($loweredArg -eq '-pv' -or $loweredArg -eq '--package-version' -or $loweredArg -eq '--packageversion') {
+        if ($versionPropsExists) { throw $("'$arg' is not valid when $versionPropsFile exists.") }
+        $packageVersion = Get-NextArg $args $i $arg
+        $i++
+    } elseif ($loweredArg -eq '-fv' -or $loweredArg -eq '--file-version' -or $loweredArg -eq '--fileversion') {
+        if ($versionPropsExists) { throw $("'$arg' is not valid when $versionPropsFile exists.") }
+        $fileVersion = Get-NextArg $args $i $arg
+        $i++
+    } elseif ($loweredArg -eq '-config' -or $loweredArg -eq '--configuration') {
+        $configuration = Get-NextArg $args $i $arg
+        $i++
+    } else {
+        throw $("Unrecognized argument: '$arg'")
+    }
+}
+
+# Build the call to the Psake script using the captured/default args
+[string[]]$task = 'Default'
+if ($runTests) {
+    $task = 'Default','Test'
+}
+$parameters = @{}
+$properties = @{}
+
+$properties.maximumParallelJobs = $maximumParallelJobs
+if (-not [string]::IsNullOrWhiteSpace($packageVersion)) {
+    $properties.packageVersion=$packageVersion
+}
+if (-not [string]::IsNullOrWhiteSpace($fileVersion)) {
+    $properties.version=$fileVersion
+}
+if (-not [string]::IsNullOrWhiteSpace($configuration)) {
+    $properties.configuration=$configuration
+}
+
+Import-Module "$PSScriptRoot/.build/psake/psake.psm1"
+Invoke-Psake "$PSScriptRoot/.build/runbuild.ps1" -task $task -properties $properties -parameters $parameters
\ No newline at end of file
diff --git a/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj b/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj
index d6e87bb..7fe2cfe 100644
--- a/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj
+++ b/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Analysis.Common</AssemblyTitle>
     <PackageTags>$(PackageTags);analysis</PackageTags>
diff --git a/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj b/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj
index 90419eb..1e3c81e 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj
+++ b/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Analysis.Kuromoji</AssemblyTitle>
     <PackageTags>$(PackageTags);analysis;japanese</PackageTags>
diff --git a/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj b/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj
index f0a39c4..99ccef6 100644
--- a/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj
+++ b/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net451</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Analysis.Morfologik</AssemblyTitle>
     <RootNamespace>Lucene.Net.Analysis</RootNamespace>
diff --git a/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj b/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj
index a3e7a42..7fc3a8e 100644
--- a/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj
+++ b/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
-    <!--<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>-->
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
+    <TargetFramework>net451</TargetFramework>
 
     <AssemblyTitle>Lucene.Net.Analysis.OpenNLP</AssemblyTitle>
     <PackageTags>$(PackageTags);analysis;natural;language;processing;opennlp</PackageTags>
diff --git a/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj b/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj
index 39506a6..b5d0668 100644
--- a/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj
+++ b/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Analysis.Phonetic</AssemblyTitle>
     <PackageTags>$(PackageTags);analysis;soundex;double;metaphone;sounds;like;beider;morse;cologne;caverphone;nysiis;match;rating</PackageTags>
diff --git a/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj b/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj
index 4f81991..53eaab5 100644
--- a/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj
+++ b/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net451</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Analysis.SmartCn</AssemblyTitle>
     <PackageTags>$(PackageTags);analysis;chinese;smart</PackageTags>
diff --git a/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj b/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj
index edfc360..1db417e 100644
--- a/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj
+++ b/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Analysis.Stempel</AssemblyTitle>
     <PackageTags>$(PackageTags);analysis;polish</PackageTags>
diff --git a/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj b/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj
index 020308c..5ffa901 100644
--- a/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj
+++ b/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net451</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Benchmark</AssemblyTitle>
     <PackageTags>$(PackageTags);benchmark</PackageTags>
diff --git a/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj b/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj
index 999ed68..51d909d 100644
--- a/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj
+++ b/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Classification</AssemblyTitle>
     <PackageTags>$(PackageTags);classification</PackageTags>
diff --git a/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj b/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj
index aa1451a..006f88d 100644
--- a/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj
+++ b/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Codecs</AssemblyTitle>
     <PackageTags>$(PackageTags);codec</PackageTags>
diff --git a/src/Lucene.Net.Demo/Lucene.Net.Demo.csproj b/src/Lucene.Net.Demo/Lucene.Net.Demo.csproj
index 5d35886..3c089cb 100644
--- a/src/Lucene.Net.Demo/Lucene.Net.Demo.csproj
+++ b/src/Lucene.Net.Demo/Lucene.Net.Demo.csproj
@@ -24,8 +24,7 @@
   <!-- Demo is deployed through the dotnet/tools/lucene-cli package -->
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Demo</AssemblyTitle>
     <Description>Simple example code for the Lucene.Net full-text search engine library from The Apache Software Foundation.</Description>
diff --git a/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj b/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj
index a67f8bc..2a1c8ef 100644
--- a/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj
+++ b/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Expressions</AssemblyTitle>
     <PackageTags>$(PackageTags);expression</PackageTags>
diff --git a/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj b/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj
index d92940d..a692ad9 100644
--- a/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj
+++ b/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Facet</AssemblyTitle>
     <PackageTags>$(PackageTags);facet;faceted</PackageTags>
diff --git a/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj b/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj
index 82a5f19..7bac191 100644
--- a/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj
+++ b/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Grouping</AssemblyTitle>
     <PackageTags>$(PackageTags);grouping;group</PackageTags>
diff --git a/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj b/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj
index ca07678..e00876a 100644
--- a/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj
+++ b/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Highlighter</AssemblyTitle>
     <PackageTags>$(PackageTags);highlight;highlighter</PackageTags>
diff --git a/src/Lucene.Net.Join/Lucene.Net.Join.csproj b/src/Lucene.Net.Join/Lucene.Net.Join.csproj
index c2d0745..b7b1ff8 100644
--- a/src/Lucene.Net.Join/Lucene.Net.Join.csproj
+++ b/src/Lucene.Net.Join/Lucene.Net.Join.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <RootNamespace>Lucene.Net.Search.Join</RootNamespace>
     
diff --git a/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj b/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj
index 7ee103c..23500bc 100644
--- a/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj
+++ b/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
     
     <AssemblyTitle>Lucene.Net.Memory</AssemblyTitle>
     <PackageTags>$(PackageTags);memory</PackageTags>
diff --git a/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj b/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj
index 592f4f1..5c8f907 100644
--- a/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj
+++ b/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Misc</AssemblyTitle>
     <PackageTags>$(PackageTags);miscellaneous</PackageTags>
diff --git a/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj b/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj
index c9db56c..c9a3d12 100644
--- a/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj
+++ b/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Queries</AssemblyTitle>
     <PackageTags>$(PackageTags);query;queries</PackageTags>
diff --git a/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj b/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj
index 0978558..eec75a1 100644
--- a/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj
+++ b/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <RootNamespace>Lucene.Net.QueryParsers</RootNamespace>
     
diff --git a/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj b/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
index 5c8cbbd..fb4c4fe 100644
--- a/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
+++ b/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Replicator</AssemblyTitle>
     <PackageTags>$(PackageTags);files;replication;replicate</PackageTags>
diff --git a/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj b/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj
index 0f120ee..75852eb 100644
--- a/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj
+++ b/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Sandbox</AssemblyTitle>
     <PackageTags>$(PackageTags);sandbox</PackageTags>
diff --git a/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj b/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj
index b024670..9848aa4 100644
--- a/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj
+++ b/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Spatial</AssemblyTitle>
     <PackageTags>$(PackageTags);spatial;geo;geospatial;2d</PackageTags>
diff --git a/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj b/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj
index 162b53a..43fbcdc 100644
--- a/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj
+++ b/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Suggest</AssemblyTitle>
     <PackageTags>$(PackageTags);suggest;suggestion</PackageTags>
diff --git a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
index 849423a..08f2314 100644
--- a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
+++ b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net451</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.TestFramework</AssemblyTitle>
     <RootNamespace>Lucene.Net</RootNamespace>
diff --git a/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj b/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj
index d2bc905..1a3bbbc 100644
--- a/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj
+++ b/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj
@@ -32,6 +32,11 @@
 
     <IsPublishable>false</IsPublishable>
     <IsPublishable Condition=" '$(TargetFramework)' == 'net48' ">true</IsPublishable>
+
+    <!-- Workaround since there are no targets on non-Windows OS. We need at least 1 TargetFramework
+        registered or MSBuild's validation will fail, so we explicitly disable it as a test project instead. -->
+    <IsTestProject>false</IsTestProject>
+    <IsTestProject Condition="$([MSBuild]::IsOsPlatform('Windows'))">true</IsTestProject>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Lucene.Net/Lucene.Net.csproj b/src/Lucene.Net/Lucene.Net.csproj
index f82a7d7..09d76cb 100644
--- a/src/Lucene.Net/Lucene.Net.csproj
+++ b/src/Lucene.Net/Lucene.Net.csproj
@@ -24,8 +24,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net45</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net45</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net</AssemblyTitle>
     <Description>Lucene.Net is a full-text search engine library capable of advanced text analysis, indexing, and searching. It can be used to easily add search capabilities to applications. Lucene.Net is a C# port of the popular Java Lucene search engine framework from The Apache Software Foundation, targeted at .NET Framework and .NET Core users.</Description>
diff --git a/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj b/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj
index 8ef38a4..8f2bfd2 100644
--- a/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj
+++ b/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj
@@ -30,8 +30,7 @@
   <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net451</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.ICU</AssemblyTitle>
     <PackageTags>$(PackageTags);icu;international;unicode</PackageTags>
diff --git a/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj b/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj
index 2800f70..17fd672 100644
--- a/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj
+++ b/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj
@@ -25,8 +25,7 @@
   <!--<Import Project="$(SolutionDir).build/nuget.props" />-->
   
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
-    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net461</TargetFrameworks>
+    <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net461</TargetFrameworks>
 
     <AssemblyTitle>Lucene.Net.Replicator.AspNetCore</AssemblyTitle>
     <Description>AspNetCore integration of Lucene.Net.Replicator for the Lucene.Net full-text search engine library from The Apache Software Foundation.</Description>
diff --git a/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj b/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj
index 90b3d09..fc66c90 100644
--- a/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj
+++ b/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj
@@ -27,6 +27,7 @@
     
     <IsPublishable>false</IsPublishable>
     <IsPublishable Condition=" '$(TargetFramework)' == 'net5.0' ">true</IsPublishable>
+    <IsTestProject>true</IsTestProject>
   </PropertyGroup>
 
   
diff --git a/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj b/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj
index 7a92962..dfd8068 100644
--- a/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj
+++ b/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj
@@ -27,6 +27,7 @@
 
     <IsPublishable>false</IsPublishable>
     <IsPublishable Condition=" '$(TargetFramework)' == 'net6.0' ">true</IsPublishable>
+    <IsTestProject>true</IsTestProject>
   </PropertyGroup>
 
   <ItemGroup>

[lucenenet] 08/15: run-tests-on-os.yml: Changed references from dotnet vstest to dotnet test in comments, log files, and display names

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit f1d4b46e1651a5d9d86e8eb6be49db7b3c28457a
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 12:04:09 2022 +0700

    run-tests-on-os.yml: Changed references from dotnet vstest to dotnet test in comments, log files, and display names
---
 .build/azure-templates/run-tests-on-os.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.build/azure-templates/run-tests-on-os.yml b/.build/azure-templates/run-tests-on-os.yml
index 9dfa28e..21ed49f 100644
--- a/.build/azure-templates/run-tests-on-os.yml
+++ b/.build/azure-templates/run-tests-on-os.yml
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-# Downloads test binaries and executes tests using dotnet vstest,
+# Downloads test binaries and executes tests using dotnet test,
 # runs the tests for each project on a background job in parallel,
 # then uploads the results to Azure DevOps pipelines
 
@@ -32,7 +32,7 @@ parameters:
   testResultsFileName: 'TestResults.trx' # The name of the file (not path) of the test results. Default 'TestResults.trx'.
   maximumParallelJobs: 8
   maximumAllowedFailures: 0
-  where: '' # A test filter expression, as defined by dotnet vstest
+  where: '' # A test filter expression, as defined by dotnet test
   dotNetSdkVersion: '' # The .NET SDK version to install
   
 steps:
@@ -162,13 +162,13 @@ steps:
                 Invoke-Expression $testExpression # For running in the foreground
             } else {
     
-                $testExpression += " > ""$testResultDirectory/dotnet-vstest.log"" 2> ""$testResultDirectory/dotnet-vstest-error.log"""
+                $testExpression += " > ""$testResultDirectory/dotnet-test.log"" 2> ""$testResultDirectory/dotnet-test-error.log"""
                 $scriptBlock = {
                     param([string]$testExpression)
                     Invoke-Expression $testExpression
                 }
     
-                # Avoid dotnet vstest collisions by delaying for 500ms
+                # Avoid dotnet test collisions by delaying for 500ms
                 Start-Sleep -Milliseconds 500
     
                 # Execute the jobs in parallel
@@ -198,7 +198,7 @@ steps:
     }
     
     $global:LASTEXITCODE = 0 # Force the script to continue on error
-  displayName: 'dotnet vstest ${{ parameters.framework }},${{ parameters.vsTestPlatform }}'
+  displayName: 'dotnet test ${{ parameters.framework }},${{ parameters.vsTestPlatform }}'
   ignoreLASTEXITCODE: true
 
 #- template: 'show-all-files.yml' # Uncomment for debugging

[lucenenet] 07/15: azure-pipelines.yml: Updated to correctly case version.props file for packaging, and to ignore build.bat because we no longer modify it during release

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit f990bd3d857c86c46045f66d86e33d8488f2857d
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 11:29:07 2022 +0700

    azure-pipelines.yml: Updated to correctly case version.props file for packaging, and to ignore build.bat because we no longer modify it during release
---
 azure-pipelines.yml | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index a530ac4..8926762 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -185,15 +185,14 @@ stages:
       displayName: 'Persist Test Settings to lucene.testsettings.json'
       condition: and(succeeded(), ne(variables['RunTests'], 'false'))
 
-    # If this is a release pipeline, copy the build.bat and Version.props files as version artifacts, which will 
-    # overwrite the build.bat and Version.props files of the release.
+    # If this is a release pipeline, copy the version.props files as a version artifact, which will
+    # be included in the release.
     - task: CopyFiles@2
-      displayName: 'Copy build.bat and Version.props Files to: /$(VersionArtifactName)'
+      displayName: 'Copy version.props Files to: /$(VersionArtifactName)'
       inputs:
         SourceFolder: '$(System.DefaultWorkingDirectory)'
         Contents: |
-          build.bat
-          Version.props
+          version.props
         TargetFolder: '$(Build.ArtifactStagingDirectory)/$(VersionArtifactName)'
       condition: and(succeeded(), eq(variables['IsRelease'], 'true'))
             
@@ -704,12 +703,14 @@ stages:
         Write-Host "##vso[task.setvariable variable=PackageVersion;]$version"
         Write-Host "##vso[build.updatebuildnumber]$version"
       displayName: 'Build VCS Label and Rehydrate Version Variables'
+
     - pwsh: |
-        $files = 'build.bat','Version.props'
+        [string[]]$files = @('version.props')
         foreach ($file in $files) {
             Copy-Item -Path "$(Build.ArtifactStagingDirectory)/$(VersionArtifactName)/$file" -Destination "$(Build.SourcesDirectory)/$file" -Force -ErrorAction Continue
         }
-      displayName: 'Update build.bat and Version.props to build only version $(PackageVersion)'
+      displayName: 'Update version.props to build only version $(PackageVersion)'
+
     - template: '.build/azure-templates/show-all-environment-variables.yml'
 
     - task: CopyFiles@2
@@ -719,10 +720,12 @@ stages:
         Contents: |
          **
          !.git/**/*
+         !.github/**/*
          !branding/**/*
-         !release/**/*
+         !_artifacts/**/*
          !src/**/bin/**/*
          !src/**/obj/**/*
+         !websites/**/*
          branding/logo/lucene-net-icon-128x128.png
         TargetFolder: '$(Build.ArtifactStagingDirectory)/srctemp'
 
@@ -767,6 +770,4 @@ stages:
       inputs:
         targetPath: '$(Build.ArtifactStagingDirectory)/$(ReleaseArtifactName)'
         artifact:  '$(ReleaseArtifactName)'
-        publishLocation: 'pipeline'
-
-# LUCENENET TODO: Write VCS Label (git tag) automatically
\ No newline at end of file
+        publishLocation: 'pipeline'
\ No newline at end of file

[lucenenet] 12/15: .github/workflows/Generate-TestWorkflows.ps1: Removed special case code for projects that only have one test target framework

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 9d5cf50db6359cddc5bf4484b542a293eb4e4d11
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 18:00:35 2022 +0700

    .github/workflows/Generate-TestWorkflows.ps1: Removed special case code for projects that only have one test target framework
---
 .github/workflows/Generate-TestWorkflows.ps1       | 25 ++++++++++++----------
 .github/workflows/Lucene-Net-Tests-AllProjects.yml |  2 +-
 .../workflows/Lucene-Net-Tests-Analysis-Common.yml |  2 +-
 .../Lucene-Net-Tests-Analysis-Kuromoji.yml         |  2 +-
 .../Lucene-Net-Tests-Analysis-Morfologik.yml       |  2 +-
 .../Lucene-Net-Tests-Analysis-Phonetic.yml         |  2 +-
 .../Lucene-Net-Tests-Analysis-SmartCn.yml          |  2 +-
 .../Lucene-Net-Tests-Analysis-Stempel.yml          |  2 +-
 .github/workflows/Lucene-Net-Tests-Benchmark.yml   |  2 +-
 .../workflows/Lucene-Net-Tests-Classification.yml  |  2 +-
 .github/workflows/Lucene-Net-Tests-Codecs.yml      |  2 +-
 .github/workflows/Lucene-Net-Tests-Demo.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-Expressions.yml |  2 +-
 .github/workflows/Lucene-Net-Tests-Facet.yml       |  2 +-
 .github/workflows/Lucene-Net-Tests-Grouping.yml    |  2 +-
 .github/workflows/Lucene-Net-Tests-Highlighter.yml |  2 +-
 .github/workflows/Lucene-Net-Tests-ICU.yml         |  2 +-
 .github/workflows/Lucene-Net-Tests-Join.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-Memory.yml      |  2 +-
 .github/workflows/Lucene-Net-Tests-Misc.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-Queries.yml     |  2 +-
 .github/workflows/Lucene-Net-Tests-QueryParser.yml |  2 +-
 .github/workflows/Lucene-Net-Tests-Replicator.yml  |  2 +-
 .github/workflows/Lucene-Net-Tests-Sandbox.yml     |  2 +-
 .github/workflows/Lucene-Net-Tests-Spatial.yml     |  2 +-
 .github/workflows/Lucene-Net-Tests-Suggest.yml     |  2 +-
 ...Net-Tests-TestFramework-DependencyInjection.yml |  2 +-
 .../workflows/Lucene-Net-Tests-TestFramework.yml   |  2 +-
 .github/workflows/Lucene-Net-Tests-_A-D.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-_E-I.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-_I-J.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-_J-S.yml        |  2 +-
 .github/workflows/Lucene-Net-Tests-_T-Z.yml        |  2 +-
 33 files changed, 46 insertions(+), 43 deletions(-)

diff --git a/.github/workflows/Generate-TestWorkflows.ps1 b/.github/workflows/Generate-TestWorkflows.ps1
index f5d0f67..e80da71 100644
--- a/.github/workflows/Generate-TestWorkflows.ps1
+++ b/.github/workflows/Generate-TestWorkflows.ps1
@@ -300,23 +300,26 @@ try {
 
 foreach ($testProject in $TestProjects) {
     $projectName = [System.IO.Path]::GetFileNameWithoutExtension($testProject)
-    [string[]]$frameworks = $TestFrameworks
+    
+     # Call the target to get the configured test frameworks for this project. We only read the first line because MSBuild adds extra output.
+    $frameworksString = $(dotnet build "$testProject" --verbosity minimal --nologo --no-restore /t:PrintTargetFrameworks /p:TestProjectsOnly=true /p:TestFrameworks=true)[0].Trim()
 
-    # Special case - CodeAnalysis only supports .NET 5.0 for testing
-    if ($projectName.Contains("Tests.CodeAnalysis")) {
-        $frameworks = @('net5.0')
+    if ($frameworksString -eq 'none') {
+        Write-Host "WARNING: Skipping project '$projectName' because it is not marked with `<IsTestProject`>true`<`/IsTestProject`> and/or it contains no test frameworks for the current environment." -ForegroundColor Yellow
+        continue
     }
 
-    # Special case - our CLI tool only supports .NET 6.0
-    if ($projectName.Contains("Tests.Cli")) {
-        $frameworks = @('net6.0')
-    }
+    [string[]]$frameworks = $frameworksString -split '\s*;\s*'
+    $frameworks = $frameworks | ? { $TestFrameworks -contains $_ } # IntersectWith
 
-    # Special case - OpenNLP.NET only supports .NET Framework
-    if ($projectName.Contains("Tests.Analysis.OpenNLP")) {
-        $frameworks = @('net48')
+    if ($frameworks.Count -eq 0) {
+        Write-Host "WARNING: ${projectName} contains no matching target frameworks: $frameworksString" -ForegroundColor Yellow
+        continue
     }
 
+    Write-Host ""
+    Write-Host "Frameworks To Test for ${projectName}: $($frameworks -join ';')" -ForegroundColor Cyan
+
     #Write-Host "Project: $projectName"
     Write-TestWorkflow -OutputDirectory $OutputDirectory -ProjectPath $testProject -RelativeRoot $RepoRoot -TestFrameworks $frameworks -OperatingSystems $OperatingSystems -TestPlatforms $TestPlatforms -Configurations $Configurations -DotNetSDKVersion $DotNetSDKVersion
 }
\ No newline at end of file
diff --git a/.github/workflows/Lucene-Net-Tests-AllProjects.yml b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
index 5526d94..571a849 100644
--- a/.github/workflows/Lucene-Net-Tests-AllProjects.yml
+++ b/.github/workflows/Lucene-Net-Tests-AllProjects.yml
@@ -72,7 +72,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
index 9fe6dfb..20506b5 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Common.yml
@@ -56,7 +56,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
index 0d5f990..2fd7e84 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Kuromoji.yml
@@ -53,7 +53,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
index 5b4fb6d..eaf323a 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Morfologik.yml
@@ -53,7 +53,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
index 2242612..aa62092 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Phonetic.yml
@@ -50,7 +50,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
index ec410bb..3b6fb5e 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-SmartCn.yml
@@ -54,7 +54,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
index 523e1d2..6b03e8c 100644
--- a/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
+++ b/.github/workflows/Lucene-Net-Tests-Analysis-Stempel.yml
@@ -51,7 +51,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Benchmark.yml b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
index 7e5ac55..8d9bde6 100644
--- a/.github/workflows/Lucene-Net-Tests-Benchmark.yml
+++ b/.github/workflows/Lucene-Net-Tests-Benchmark.yml
@@ -63,7 +63,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Classification.yml b/.github/workflows/Lucene-Net-Tests-Classification.yml
index 6f615cb..e2cb33b 100644
--- a/.github/workflows/Lucene-Net-Tests-Classification.yml
+++ b/.github/workflows/Lucene-Net-Tests-Classification.yml
@@ -51,7 +51,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Codecs.yml b/.github/workflows/Lucene-Net-Tests-Codecs.yml
index d1a68ea..d97b2e9 100644
--- a/.github/workflows/Lucene-Net-Tests-Codecs.yml
+++ b/.github/workflows/Lucene-Net-Tests-Codecs.yml
@@ -49,7 +49,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Demo.yml b/.github/workflows/Lucene-Net-Tests-Demo.yml
index b522214..9290e55 100644
--- a/.github/workflows/Lucene-Net-Tests-Demo.yml
+++ b/.github/workflows/Lucene-Net-Tests-Demo.yml
@@ -58,7 +58,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Expressions.yml b/.github/workflows/Lucene-Net-Tests-Expressions.yml
index 9da455d..8683860 100644
--- a/.github/workflows/Lucene-Net-Tests-Expressions.yml
+++ b/.github/workflows/Lucene-Net-Tests-Expressions.yml
@@ -51,7 +51,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Facet.yml b/.github/workflows/Lucene-Net-Tests-Facet.yml
index aae1b43..f9092b5 100644
--- a/.github/workflows/Lucene-Net-Tests-Facet.yml
+++ b/.github/workflows/Lucene-Net-Tests-Facet.yml
@@ -53,7 +53,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Grouping.yml b/.github/workflows/Lucene-Net-Tests-Grouping.yml
index 4ad3f1f..ed60a69 100644
--- a/.github/workflows/Lucene-Net-Tests-Grouping.yml
+++ b/.github/workflows/Lucene-Net-Tests-Grouping.yml
@@ -51,7 +51,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Highlighter.yml b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
index 5f94545..dd431d7 100644
--- a/.github/workflows/Lucene-Net-Tests-Highlighter.yml
+++ b/.github/workflows/Lucene-Net-Tests-Highlighter.yml
@@ -53,7 +53,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-ICU.yml b/.github/workflows/Lucene-Net-Tests-ICU.yml
index f853b30..59a3d7d 100644
--- a/.github/workflows/Lucene-Net-Tests-ICU.yml
+++ b/.github/workflows/Lucene-Net-Tests-ICU.yml
@@ -66,7 +66,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Join.yml b/.github/workflows/Lucene-Net-Tests-Join.yml
index 3c3a62c..e251662 100644
--- a/.github/workflows/Lucene-Net-Tests-Join.yml
+++ b/.github/workflows/Lucene-Net-Tests-Join.yml
@@ -52,7 +52,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Memory.yml b/.github/workflows/Lucene-Net-Tests-Memory.yml
index e9f6812..ef649d5 100644
--- a/.github/workflows/Lucene-Net-Tests-Memory.yml
+++ b/.github/workflows/Lucene-Net-Tests-Memory.yml
@@ -54,7 +54,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Misc.yml b/.github/workflows/Lucene-Net-Tests-Misc.yml
index cda07b6..04fec0e 100644
--- a/.github/workflows/Lucene-Net-Tests-Misc.yml
+++ b/.github/workflows/Lucene-Net-Tests-Misc.yml
@@ -50,7 +50,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Queries.yml b/.github/workflows/Lucene-Net-Tests-Queries.yml
index 8c8ac4f..2be29ba 100644
--- a/.github/workflows/Lucene-Net-Tests-Queries.yml
+++ b/.github/workflows/Lucene-Net-Tests-Queries.yml
@@ -50,7 +50,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-QueryParser.yml b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
index 8463e17..4b3d270 100644
--- a/.github/workflows/Lucene-Net-Tests-QueryParser.yml
+++ b/.github/workflows/Lucene-Net-Tests-QueryParser.yml
@@ -56,7 +56,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Replicator.yml b/.github/workflows/Lucene-Net-Tests-Replicator.yml
index d518a2c..b741749 100644
--- a/.github/workflows/Lucene-Net-Tests-Replicator.yml
+++ b/.github/workflows/Lucene-Net-Tests-Replicator.yml
@@ -55,7 +55,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Sandbox.yml b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
index da9c358..f2d1b75 100644
--- a/.github/workflows/Lucene-Net-Tests-Sandbox.yml
+++ b/.github/workflows/Lucene-Net-Tests-Sandbox.yml
@@ -51,7 +51,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Spatial.yml b/.github/workflows/Lucene-Net-Tests-Spatial.yml
index 0fdc11d..8563d86 100644
--- a/.github/workflows/Lucene-Net-Tests-Spatial.yml
+++ b/.github/workflows/Lucene-Net-Tests-Spatial.yml
@@ -52,7 +52,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-Suggest.yml b/.github/workflows/Lucene-Net-Tests-Suggest.yml
index fbf8f09..99c0b1a 100644
--- a/.github/workflows/Lucene-Net-Tests-Suggest.yml
+++ b/.github/workflows/Lucene-Net-Tests-Suggest.yml
@@ -53,7 +53,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
index 0473df5..a80f617 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework-DependencyInjection.yml
@@ -49,7 +49,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-TestFramework.yml b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
index 8d4c7d4..7696055 100644
--- a/.github/workflows/Lucene-Net-Tests-TestFramework.yml
+++ b/.github/workflows/Lucene-Net-Tests-TestFramework.yml
@@ -51,7 +51,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-_A-D.yml b/.github/workflows/Lucene-Net-Tests-_A-D.yml
index e905e1f..ac865f2 100644
--- a/.github/workflows/Lucene-Net-Tests-_A-D.yml
+++ b/.github/workflows/Lucene-Net-Tests-_A-D.yml
@@ -60,7 +60,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-_E-I.yml b/.github/workflows/Lucene-Net-Tests-_E-I.yml
index ffea59b..d6682ca 100644
--- a/.github/workflows/Lucene-Net-Tests-_E-I.yml
+++ b/.github/workflows/Lucene-Net-Tests-_E-I.yml
@@ -70,7 +70,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-_I-J.yml b/.github/workflows/Lucene-Net-Tests-_I-J.yml
index b4612bf..5f57e15 100644
--- a/.github/workflows/Lucene-Net-Tests-_I-J.yml
+++ b/.github/workflows/Lucene-Net-Tests-_I-J.yml
@@ -75,7 +75,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-_J-S.yml b/.github/workflows/Lucene-Net-Tests-_J-S.yml
index 225f048..999e516 100644
--- a/.github/workflows/Lucene-Net-Tests-_J-S.yml
+++ b/.github/workflows/Lucene-Net-Tests-_J-S.yml
@@ -62,7 +62,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:
diff --git a/.github/workflows/Lucene-Net-Tests-_T-Z.yml b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
index 034d44f..2cb3b3c 100644
--- a/.github/workflows/Lucene-Net-Tests-_T-Z.yml
+++ b/.github/workflows/Lucene-Net-Tests-_T-Z.yml
@@ -57,7 +57,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [windows-latest, ubuntu-latest]
-        framework: [net6.0, net5.0, net461, net48]
+        framework: [net6.0, net5.0, net48, net461]
         platform: [x64]
         configuration: [Release]
         exclude:

[lucenenet] 03/15: .build/runbuild.ps1: Removed dependency on dotnet-install.ps1 and simply throw an exception if the .NET SDK doesn't meet the minimum version

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 9a25492ce6aecf430ae47274942ae5b3f54252b6
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Thu Jan 6 12:02:16 2022 +0700

    .build/runbuild.ps1: Removed dependency on dotnet-install.ps1 and simply throw an exception if the .NET SDK doesn't meet the minimum version
---
 .build/dotnet-install.ps1 | 686 ----------------------------------------------
 .build/runbuild.ps1       |  66 +----
 LICENSE.txt               |  26 --
 azure-pipelines.yml       |   3 +-
 4 files changed, 15 insertions(+), 766 deletions(-)

diff --git a/.build/dotnet-install.ps1 b/.build/dotnet-install.ps1
deleted file mode 100644
index 16e9be8..0000000
--- a/.build/dotnet-install.ps1
+++ /dev/null
@@ -1,686 +0,0 @@
-#
-# Copyright (c) .NET Foundation and contributors. All rights reserved.
-# Licensed under the MIT license. See LICENSE file in the project root for full license information.
-#
-
-<#
-.SYNOPSIS
-    Installs dotnet cli
-.DESCRIPTION
-    Installs dotnet cli. If dotnet installation already exists in the given directory
-    it will update it only if the requested version differs from the one already installed.
-.PARAMETER Channel
-    Default: LTS
-    Download from the Channel specified. Possible values:
-    - Current - most current release
-    - LTS - most current supported release
-    - 2-part version in a format A.B - represents a specific release
-          examples: 2.0, 1.0
-    - Branch name
-          examples: release/2.0.0, Master
-    Note: The version parameter overrides the channel parameter.
-.PARAMETER Version
-    Default: latest
-    Represents a build version on specific channel. Possible values:
-    - latest - most latest build on specific channel
-    - coherent - most latest coherent build on specific channel
-          coherent applies only to SDK downloads
-    - 3-part version in a format A.B.C - represents specific version of build
-          examples: 2.0.0-preview2-006120, 1.1.0
-.PARAMETER InstallDir
-    Default: %LocalAppData%\Microsoft\dotnet
-    Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
-.PARAMETER Architecture
-    Default: <auto> - this value represents currently running OS architecture
-    Architecture of dotnet binaries to be installed.
-    Possible values are: <auto>, amd64, x64, x86, arm64, arm
-.PARAMETER SharedRuntime
-    This parameter is obsolete and may be removed in a future version of this script.
-    The recommended alternative is '-Runtime dotnet'.
-    Installs just the shared runtime bits, not the entire SDK.
-.PARAMETER Runtime
-    Installs just a shared runtime, not the entire SDK.
-    Possible values:
-        - dotnet     - the Microsoft.NETCore.App shared runtime
-        - aspnetcore - the Microsoft.AspNetCore.App shared runtime
-        - windowsdesktop - the Microsoft.WindowsDesktop.App shared runtime
-.PARAMETER DryRun
-    If set it will not perform installation but instead display what command line to use to consistently install
-    currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link
-    with specific version so that this command can be used deterministicly in a build script.
-    It also displays binaries location if you prefer to install or download it yourself.
-.PARAMETER NoPath
-    By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder.
-    If set it will display binaries location but not set any environment variable.
-.PARAMETER Verbose
-    Displays diagnostics information.
-.PARAMETER AzureFeed
-    Default: https://dotnetcli.azureedge.net/dotnet
-    This parameter typically is not changed by the user.
-    It allows changing the URL for the Azure feed used by this installer.
-.PARAMETER UncachedFeed
-    This parameter typically is not changed by the user.
-    It allows changing the URL for the Uncached feed used by this installer.
-.PARAMETER FeedCredential
-    Used as a query string to append to the Azure feed.
-    It allows changing the URL to use non-public blob storage accounts.
-.PARAMETER ProxyAddress
-    If set, the installer will use the proxy when making web requests
-.PARAMETER ProxyUseDefaultCredentials
-    Default: false
-    Use default credentials, when using proxy address.
-.PARAMETER SkipNonVersionedFiles
-    Default: false
-    Skips installing non-versioned files if they already exist, such as dotnet.exe.
-.PARAMETER NoCdn
-    Disable downloading from the Azure CDN, and use the uncached feed directly.
-.PARAMETER JSonFile
-    Determines the SDK version from a user specified global.json file
-    Note: global.json must have a value for 'SDK:Version'
-#>
-[cmdletbinding()]
-param(
-   [string]$Channel="LTS",
-   [string]$Version="Latest",
-   [string]$JSonFile,
-   [string]$InstallDir="<auto>",
-   [string]$Architecture="<auto>",
-   [ValidateSet("dotnet", "aspnetcore", "windowsdesktop", IgnoreCase = $false)]
-   [string]$Runtime,
-   [Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")]
-   [switch]$SharedRuntime,
-   [switch]$DryRun,
-   [switch]$NoPath,
-   [string]$AzureFeed="https://dotnetcli.azureedge.net/dotnet",
-   [string]$UncachedFeed="https://dotnetcli.blob.core.windows.net/dotnet",
-   [string]$FeedCredential,
-   [string]$ProxyAddress,
-   [switch]$ProxyUseDefaultCredentials,
-   [switch]$SkipNonVersionedFiles,
-   [switch]$NoCdn
-)
-
-Set-StrictMode -Version Latest
-$ErrorActionPreference="Stop"
-$ProgressPreference="SilentlyContinue"
-
-if ($NoCdn) {
-    $AzureFeed = $UncachedFeed
-}
-
-$BinFolderRelativePath=""
-
-if ($SharedRuntime -and (-not $Runtime)) {
-    $Runtime = "dotnet"
-}
-
-# example path with regex: shared/1.0.0-beta-12345/somepath
-$VersionRegEx="/\d+\.\d+[^/]+/"
-$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
-
-function Say($str) {
-    Write-Host "dotnet-install: $str"
-}
-
-function Say-Verbose($str) {
-    Write-Verbose "dotnet-install: $str"
-}
-
-function Say-Invocation($Invocation) {
-    $command = $Invocation.MyCommand;
-    $args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
-    Say-Verbose "$command $args"
-}
-
-function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
-    $Attempts = 0
-
-    while ($true) {
-        try {
-            return $ScriptBlock.Invoke()
-        }
-        catch {
-            $Attempts++
-            if ($Attempts -lt $MaxAttempts) {
-                Start-Sleep $SecondsBetweenAttempts
-            }
-            else {
-                throw
-            }
-        }
-    }
-}
-
-function Get-Machine-Architecture() {
-    Say-Invocation $MyInvocation
-
-    # possible values: amd64, x64, x86, arm64, arm
-    return $ENV:PROCESSOR_ARCHITECTURE
-}
-
-function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
-    Say-Invocation $MyInvocation
-
-    switch ($Architecture.ToLower()) {
-        { $_ -eq "<auto>" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) }
-        { ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
-        { $_ -eq "x86" } { return "x86" }
-        { $_ -eq "arm" } { return "arm" }
-        { $_ -eq "arm64" } { return "arm64" }
-        default { throw "Architecture not supported. If you think this is a bug, report it at https://github.com/dotnet/sdk/issues" }
-    }
-}
-
-# The version text returned from the feeds is a 1-line or 2-line string:
-# For the SDK and the dotnet runtime (2 lines):
-# Line 1: # commit_hash
-# Line 2: # 4-part version
-# For the aspnetcore runtime (1 line):
-# Line 1: # 4-part version
-function Get-Version-Info-From-Version-Text([string]$VersionText) {
-    Say-Invocation $MyInvocation
-
-    $Data = -split $VersionText
-
-    $VersionInfo = @{
-        CommitHash = $(if ($Data.Count -gt 1) { $Data[0] })
-        Version = $Data[-1] # last line is always the version number.
-    }
-    return $VersionInfo
-}
-
-function Load-Assembly([string] $Assembly) {
-    try {
-        Add-Type -Assembly $Assembly | Out-Null
-    }
-    catch {
-        # On Nano Server, Powershell Core Edition is used.  Add-Type is unable to resolve base class assemblies because they are not GAC'd.
-        # Loading the base class assemblies is not unnecessary as the types will automatically get resolved.
-    }
-}
-
-function GetHTTPResponse([Uri] $Uri)
-{
-    Invoke-With-Retry(
-    {
-
-        $HttpClient = $null
-
-        try {
-            # HttpClient is used vs Invoke-WebRequest in order to support Nano Server which doesn't support the Invoke-WebRequest cmdlet.
-            Load-Assembly -Assembly System.Net.Http
-
-            if(-not $ProxyAddress) {
-                try {
-                    # Despite no proxy being explicitly specified, we may still be behind a default proxy
-                    $DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy;
-                    if($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) {
-                        $ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString
-                        $ProxyUseDefaultCredentials = $true
-                    }
-                } catch {
-                    # Eat the exception and move forward as the above code is an attempt
-                    #    at resolving the DefaultProxy that may not have been a problem.
-                    $ProxyAddress = $null
-                    Say-Verbose("Exception ignored: $_.Exception.Message - moving forward...")
-                }
-            }
-
-            if($ProxyAddress) {
-                $HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
-                $HttpClientHandler.Proxy =  New-Object System.Net.WebProxy -Property @{Address=$ProxyAddress;UseDefaultCredentials=$ProxyUseDefaultCredentials}
-                $HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler
-            }
-            else {
-
-                $HttpClient = New-Object System.Net.Http.HttpClient
-            }
-            # Default timeout for HttpClient is 100s.  For a 50 MB download this assumes 500 KB/s average, any less will time out
-            # 20 minutes allows it to work over much slower connections.
-            $HttpClient.Timeout = New-TimeSpan -Minutes 20
-            $Response = $HttpClient.GetAsync("${Uri}${FeedCredential}").Result
-            if (($Response -eq $null) -or (-not ($Response.IsSuccessStatusCode))) {
-                 # The feed credential is potentially sensitive info. Do not log FeedCredential to console output.
-                $ErrorMsg = "Failed to download $Uri."
-                if ($Response -ne $null) {
-                    $ErrorMsg += "  $Response"
-                }
-
-                throw $ErrorMsg
-            }
-
-             return $Response
-        }
-        finally {
-             if ($HttpClient -ne $null) {
-                $HttpClient.Dispose()
-            }
-        }
-    })
-}
-
-function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
-    Say-Invocation $MyInvocation
-
-    $VersionFileUrl = $null
-    if ($Runtime -eq "dotnet") {
-        $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
-    }
-    elseif ($Runtime -eq "aspnetcore") {
-        $VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
-    }
-    # Currently, the WindowsDesktop runtime is manufactured with the .Net core runtime
-    elseif ($Runtime -eq "windowsdesktop") {
-        $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
-    }
-    elseif (-not $Runtime) {
-        if ($Coherent) {
-            $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.coherent.version"
-        }
-        else {
-            $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
-        }
-    }
-    else {
-        throw "Invalid value for `$Runtime"
-    }
-    try {
-        $Response = GetHTTPResponse -Uri $VersionFileUrl
-    }
-    catch {
-        throw "Could not resolve version information."
-    }
-    $StringContent = $Response.Content.ReadAsStringAsync().Result
-
-    switch ($Response.Content.Headers.ContentType) {
-        { ($_ -eq "application/octet-stream") } { $VersionText = $StringContent }
-        { ($_ -eq "text/plain") } { $VersionText = $StringContent }
-        { ($_ -eq "text/plain; charset=UTF-8") } { $VersionText = $StringContent }
-        default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." }
-    }
-
-    $VersionInfo = Get-Version-Info-From-Version-Text $VersionText
-
-    return $VersionInfo
-}
-
-function Parse-Jsonfile-For-Version([string]$JSonFile) {
-    Say-Invocation $MyInvocation
-
-    If (-Not (Test-Path $JSonFile)) {
-        throw "Unable to find '$JSonFile'"
-    }
-    try {
-        $JSonContent = Get-Content($JSonFile) -Raw | ConvertFrom-Json | Select-Object -expand "sdk" -ErrorAction SilentlyContinue
-    }
-    catch {
-        throw "Json file unreadable: '$JSonFile'"
-    }
-    if ($JSonContent) {
-        try {
-            $JSonContent.PSObject.Properties | ForEach-Object {
-                $PropertyName = $_.Name
-                if ($PropertyName -eq "version") {
-                    $Version = $_.Value
-                    Say-Verbose "Version = $Version"
-                }
-            }
-        }
-        catch {
-            throw "Unable to parse the SDK node in '$JSonFile'"
-        }
-    }
-    else {
-        throw "Unable to find the SDK node in '$JSonFile'"
-    }
-    If ($Version -eq $null) {
-        throw "Unable to find the SDK:version node in '$JSonFile'"
-    }
-    return $Version
-}
-
-function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version, [string]$JSonFile) {
-    Say-Invocation $MyInvocation
-
-    if (-not $JSonFile) {
-        switch ($Version.ToLower()) {
-            { $_ -eq "latest" } {
-                $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
-                return $LatestVersionInfo.Version
-            }
-            { $_ -eq "coherent" } {
-                $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
-                return $LatestVersionInfo.Version
-            }
-            default { return $Version }
-        }
-    }
-    else {
-        return Parse-Jsonfile-For-Version $JSonFile
-    }
-}
-
-function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
-    Say-Invocation $MyInvocation
-
-    if ($Runtime -eq "dotnet") {
-        $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
-    }
-    elseif ($Runtime -eq "aspnetcore") {
-        $PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
-    }
-    elseif ($Runtime -eq "windowsdesktop") {
-        $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/windowsdesktop-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
-    }
-    elseif (-not $Runtime) {
-        $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificVersion-win-$CLIArchitecture.zip"
-    }
-    else {
-        throw "Invalid value for `$Runtime"
-    }
-
-    Say-Verbose "Constructed primary named payload URL: $PayloadURL"
-
-    return $PayloadURL
-}
-
-function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
-    Say-Invocation $MyInvocation
-
-    if (-not $Runtime) {
-        $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-dev-win-$CLIArchitecture.$SpecificVersion.zip"
-    }
-    elseif ($Runtime -eq "dotnet") {
-        $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-win-$CLIArchitecture.$SpecificVersion.zip"
-    }
-    else {
-        return $null
-    }
-
-    Say-Verbose "Constructed legacy named payload URL: $PayloadURL"
-
-    return $PayloadURL
-}
-
-function Get-User-Share-Path() {
-    Say-Invocation $MyInvocation
-
-    $InstallRoot = $env:DOTNET_INSTALL_DIR
-    if (!$InstallRoot) {
-        $InstallRoot = "$env:LocalAppData\Microsoft\dotnet"
-    }
-    return $InstallRoot
-}
-
-function Resolve-Installation-Path([string]$InstallDir) {
-    Say-Invocation $MyInvocation
-
-    if ($InstallDir -eq "<auto>") {
-        return Get-User-Share-Path
-    }
-    return $InstallDir
-}
-
-function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
-    Say-Invocation $MyInvocation
-
-    $DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion
-    Say-Verbose "Is-Dotnet-Package-Installed: DotnetPackagePath=$DotnetPackagePath"
-    return Test-Path $DotnetPackagePath -PathType Container
-}
-
-function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
-    # Too much spam
-    # Say-Invocation $MyInvocation
-
-    return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath)
-}
-
-function Get-Path-Prefix-With-Version($path) {
-    $match = [regex]::match($path, $VersionRegEx)
-    if ($match.Success) {
-        return $entry.FullName.Substring(0, $match.Index + $match.Length)
-    }
-
-    return $null
-}
-
-function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) {
-    Say-Invocation $MyInvocation
-
-    $ret = @()
-    foreach ($entry in $Zip.Entries) {
-        $dir = Get-Path-Prefix-With-Version $entry.FullName
-        if ($dir -ne $null) {
-            $path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
-            if (-Not (Test-Path $path -PathType Container)) {
-                $ret += $dir
-            }
-        }
-    }
-
-    $ret = $ret | Sort-Object | Get-Unique
-
-    $values = ($ret | foreach { "$_" }) -join ";"
-    Say-Verbose "Directories to unpack: $values"
-
-    return $ret
-}
-
-# Example zip content and extraction algorithm:
-# Rule: files if extracted are always being extracted to the same relative path locally
-# .\
-#       a.exe   # file does not exist locally, extract
-#       b.dll   # file exists locally, override only if $OverrideFiles set
-#       aaa\    # same rules as for files
-#           ...
-#       abc\1.0.0\  # directory contains version and exists locally
-#           ...     # do not extract content under versioned part
-#       abc\asd\    # same rules as for files
-#            ...
-#       def\ghi\1.0.1\  # directory contains version and does not exist locally
-#           ...         # extract content
-function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
-    Say-Invocation $MyInvocation
-
-    Load-Assembly -Assembly System.IO.Compression.FileSystem
-    Set-Variable -Name Zip
-    try {
-        $Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
-
-        $DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath
-
-        foreach ($entry in $Zip.Entries) {
-            $PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
-            if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
-                $DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
-                $DestinationDir = Split-Path -Parent $DestinationPath
-                $OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
-                if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) {
-                    New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null
-                    [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles)
-                }
-            }
-        }
-    }
-    finally {
-        if ($Zip -ne $null) {
-            $Zip.Dispose()
-        }
-    }
-}
-
-function DownloadFile($Source, [string]$OutPath) {
-    if ($Source -notlike "http*") {
-        #  Using System.IO.Path.GetFullPath to get the current directory
-        #    does not work in this context - $pwd gives the current directory
-        if (![System.IO.Path]::IsPathRooted($Source)) {
-            $Source = $(Join-Path -Path $pwd -ChildPath $Source)
-        }
-        $Source = Get-Absolute-Path $Source
-        Say "Copying file from $Source to $OutPath"
-        Copy-Item $Source $OutPath
-        return
-    }
-
-    $Stream = $null
-
-    try {
-        $Response = GetHTTPResponse -Uri $Source
-        $Stream = $Response.Content.ReadAsStreamAsync().Result
-        $File = [System.IO.File]::Create($OutPath)
-        $Stream.CopyTo($File)
-        $File.Close()
-    }
-    finally {
-        if ($Stream -ne $null) {
-            $Stream.Dispose()
-        }
-    }
-}
-
-function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolderRelativePath) {
-    $BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath)
-    if (-Not $NoPath) {
-        $SuffixedBinPath = "$BinPath;"
-        if (-Not $env:path.Contains($SuffixedBinPath)) {
-            Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process."
-            $env:path = $SuffixedBinPath + $env:path
-        } else {
-            Say-Verbose "Current process PATH already contains `"$BinPath`""
-        }
-    }
-    else {
-        Say "Binaries of dotnet can be found in $BinPath"
-    }
-}
-
-$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
-$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version -JSonFile $JSonFile
-$DownloadLink = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
-$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
-
-$InstallRoot = Resolve-Installation-Path $InstallDir
-Say-Verbose "InstallRoot: $InstallRoot"
-$ScriptName = $MyInvocation.MyCommand.Name
-
-if ($DryRun) {
-    Say "Payload URLs:"
-    Say "Primary named payload URL: $DownloadLink"
-    if ($LegacyDownloadLink) {
-        Say "Legacy named payload URL: $LegacyDownloadLink"
-    }
-    $RepeatableCommand = ".\$ScriptName -Version `"$SpecificVersion`" -InstallDir `"$InstallRoot`" -Architecture `"$CLIArchitecture`""
-    if ($Runtime -eq "dotnet") {
-       $RepeatableCommand+=" -Runtime `"dotnet`""
-    }
-    elseif ($Runtime -eq "aspnetcore") {
-       $RepeatableCommand+=" -Runtime `"aspnetcore`""
-    }
-    foreach ($key in $MyInvocation.BoundParameters.Keys) {
-        if (-not (@("Architecture","Channel","DryRun","InstallDir","Runtime","SharedRuntime","Version") -contains $key)) {
-            $RepeatableCommand+=" -$key `"$($MyInvocation.BoundParameters[$key])`""
-        }
-    }
-    Say "Repeatable invocation: $RepeatableCommand"
-    exit 0
-}
-
-if ($Runtime -eq "dotnet") {
-    $assetName = ".NET Core Runtime"
-    $dotnetPackageRelativePath = "shared\Microsoft.NETCore.App"
-}
-elseif ($Runtime -eq "aspnetcore") {
-    $assetName = "ASP.NET Core Runtime"
-    $dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App"
-}
-elseif ($Runtime -eq "windowsdesktop") {
-    $assetName = ".NET Core Windows Desktop Runtime"
-    $dotnetPackageRelativePath = "shared\Microsoft.WindowsDesktop.App"
-}
-elseif (-not $Runtime) {
-    $assetName = ".NET Core SDK"
-    $dotnetPackageRelativePath = "sdk"
-}
-else {
-    throw "Invalid value for `$Runtime"
-}
-
-#  Check if the SDK version is already installed.
-$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
-if ($isAssetInstalled) {
-    Say "$assetName version $SpecificVersion is already installed."
-    Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
-    exit 0
-}
-
-New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
-
-$installDrive = $((Get-Item $InstallRoot).PSDrive.Name);
-$diskInfo = Get-PSDrive -Name $installDrive
-if ($diskInfo.Free / 1MB -le 100) {
-    Say "There is not enough disk space on drive ${installDrive}:"
-    exit 0
-}
-
-$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
-Say-Verbose "Zip path: $ZipPath"
-
-$DownloadFailed = $false
-Say "Downloading link: $DownloadLink"
-try {
-    DownloadFile -Source $DownloadLink -OutPath $ZipPath
-}
-catch {
-    Say "Cannot download: $DownloadLink"
-    if ($LegacyDownloadLink) {
-        $DownloadLink = $LegacyDownloadLink
-        $ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
-        Say-Verbose "Legacy zip path: $ZipPath"
-        Say "Downloading legacy link: $DownloadLink"
-        try {
-            DownloadFile -Source $DownloadLink -OutPath $ZipPath
-        }
-        catch {
-            Say "Cannot download: $DownloadLink"
-            $DownloadFailed = $true
-        }
-    }
-    else {
-        $DownloadFailed = $true
-    }
-}
-
-if ($DownloadFailed) {
-    throw "Could not find/download: `"$assetName`" with version = $SpecificVersion`nRefer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
-}
-
-Say "Extracting zip from $DownloadLink"
-Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
-
-#  Check if the SDK version is installed; if not, fail the installation.
-$isAssetInstalled = $false
-
-# if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed.
-if ($SpecificVersion -Match "rtm" -or $SpecificVersion -Match "servicing") {
-    $ReleaseVersion = $SpecificVersion.Split("-")[0]
-    Say-Verbose "Checking installation: version = $ReleaseVersion"
-    $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $ReleaseVersion
-}
-
-#  Check if the SDK version is installed.
-if (!$isAssetInstalled) {
-    Say-Verbose "Checking installation: version = $SpecificVersion"
-    $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
-}
-
-if (!$isAssetInstalled) {
-    throw "`"$assetName`" with version = $SpecificVersion failed to install with an unknown error."
-}
-
-Remove-Item $ZipPath
-
-Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
-
-Say "Installation finished"
-exit 0
diff --git a/.build/runbuild.ps1 b/.build/runbuild.ps1
index 1f3c87f..2680a8a 100644
--- a/.build/runbuild.ps1
+++ b/.build/runbuild.ps1
@@ -26,9 +26,7 @@ properties {
     [string]$test_results_directory = "$artifactsDirectory/TestResults"
     [string]$publish_directory = "$artifactsDirectory/Publish"
     [string]$solutionFile = "$base_directory/Lucene.Net.sln"
-    [string]$sdkPath = "$env:programfiles/dotnet/sdk"
-    [string]$sdkVersion = "6.0.100"
-    [bool]$skipSdkInstallation = $false
+    [string]$minimumSdkVersion = "6.0.100"
     [string]$globalJsonFile = "$base_directory/global.json"
     [string]$versionPropsFile = "$base_directory/version.props"
     [string]$build_bat = "$base_directory/build.bat"
@@ -71,33 +69,26 @@ task Clean -description "This task cleans up the build directory" {
     Get-ChildItem $base_directory -Include *.bak -Recurse | foreach ($_) {Remove-Item $_.FullName}
 }
 
-task UpdateLocalSDKVersion -description "Backs up the project.json file and pins the version to $sdkVersion" {
+task UpdateLocalSDKVersion -description "Backs up the project.json file and pins the version to $minimumSdkVersion" {
     Backup-File $globalJsonFile
     Generate-Global-Json `
-        -sdkVersion $sdkVersion `
+        -sdkVersion $minimumSdkVersion `
         -file $globalJsonFile
 }
 
-task InstallSDK -description "This task makes sure the correct SDK version is installed to build" -ContinueOnError {
-    if (!$skipSdkInstallation) {
-        Write-Host "##teamcity[progressMessage 'Installing SDK $sdkVersion']"
-        Write-Host "##vso[task.setprogress]'Installing SDK $sdkVersion'"
-        $installed = Is-Sdk-Version-Installed $sdkVersion
-        if (!$installed) {
-            Write-Host "Requires SDK version $sdkVersion, installing..." -ForegroundColor Red
-            Invoke-Expression "$base_directory\.build\dotnet-install.ps1 -Version $sdkVersion"
-        }
-
-        # Safety check - this should never happen
-        & where.exe dotnet.exe
-
-        if ($LASTEXITCODE -ne 0) {
-            throw "Could not find dotnet CLI in PATH. Please install the .NET SDK, version $sdkVersion."
-        }
+task CheckSDK -description "This task makes sure the correct SDK version is installed" {
+    # Check prerequisites
+    $sdkVersion = ((& dotnet --version) | Out-String).Trim()
+    if ($LASTEXITCODE -ne 0) {
+        throw "dotnet command was not found. Please install .NET $minimumSdkVersion or higher SDK and make sure it is in your PATH."
+    }
+    $releaseVersion = if ($sdkVersion.Contains('-')) { "$sdkVersion".Substring(0, "$sdkVersion".IndexOf('-')) } else { $sdkVersion }
+    if ([version]$releaseVersion -lt ([version]$minimumSdkVersion)) {
+        throw "Minimum .NET SDK $minimumSdkVersion required. Current SDK version is $releaseVersion. Please install the required SDK before running the command."
     }
 }
 
-task Init -depends InstallSDK, UpdateLocalSDKVersion -description "This task makes sure the build environment is correctly setup" {
+task Init -depends CheckSDK, UpdateLocalSDKVersion -description "This task makes sure the build environment is correctly setup" {
     #Update TeamCity, MyGet, or Azure Pipelines with packageVersion
     Write-Output "##teamcity[buildNumber '$packageVersion']"
     Write-Output "##myget[buildNumber '$packageVersion']"
@@ -267,7 +258,7 @@ task Publish -depends Compile -description "This task uses dotnet publish to pac
     }
 }
 
-task Test -depends InstallSDK, UpdateLocalSDKVersion, Restore -description "This task runs the tests" {
+task Test -depends CheckSDK, UpdateLocalSDKVersion, Restore -description "This task runs the tests" {
     Write-Host "##teamcity[progressMessage 'Testing']"
     Write-Host "##vso[task.setprogress]'Testing'"
     Write-Host "Running tests..." -ForegroundColor DarkCyan
@@ -442,35 +433,6 @@ function Get-FrameworksToTest() {
     return [System.Linq.Enumerable]::ToArray($frameworksToTest)
 }
 
-function Is-Sdk-Version-Installed([string]$sdkVersion) {
-    & where.exe dotnet.exe | Out-Null
-    if ($LASTEXITCODE -eq 0) {
-        pushd $PSScriptRoot
-        $version = ((& dotnet --version 2>&1) | Out-String).Trim()
-        popd
-
-        # May happen if global.json contains a version that
-        # isn't installed, but we have at least one
-        if ($version.Contains('not found')) {
-            return $false
-        } elseif ([version]$version -eq [version]$sdkVersion) {
-            return $true
-        } elseif ([version]$version -gt [version]"2.1.0") {
-            $availableSdks = ((& dotnet --list-sdks) | Out-String)
-            if ($LASTEXITCODE -eq 0) {
-                if ($availableSdks.Contains($sdkVersion)) {
-                    return $true
-                } else {
-                    return $false
-                }
-            } else {
-                return (Test-Path "$sdkPath/$sdkVersion")
-            }
-        }
-    }
-    return $false
-}
-
 function Prepare-For-Build() {
     #Use only the major version as the assembly version.
     #This ensures binary compatibility unless the major version changes.
diff --git a/LICENSE.txt b/LICENSE.txt
index 4acef96..4ff2c6a 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -717,32 +717,6 @@ falls under the following license:
 // NO WARRANTY!  This class is in the public domain.
 
 ---
- 
-The code in build/dotnet-install.ps1 falls under the following license:
-
-The MIT License (MIT)
-
-Copyright (c) 2015 .NET Foundation
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
----
 
 The code in build/psake/ falls under the following license:
 
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index d576f31..a24ca7c 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -138,8 +138,7 @@ stages:
             publish_directory='$(PublishTempDirectory)';
             nuget_package_directory='$(NuGetArtifactDirectory)';
             # Lock the build.bat so it only builds this version in the release distribution
-            generateBuildBat=$generateBuildBat;
-            skipSdkInstallation='true'
+            generateBuildBat=$generateBuildBat
         }
         [string[]]$tasks = @($primaryCommand)
         if ($env:RunTests -ne 'false') {

[lucenenet] 06/15: Lucene.Net.sln: Added .rat-excludes to Solution Items

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit ec80a8b46de3aa2210fbda7520badb41e65654c3
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Fri Jan 7 10:14:39 2022 +0700

    Lucene.Net.sln: Added .rat-excludes to Solution Items
---
 Lucene.Net.sln | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Lucene.Net.sln b/Lucene.Net.sln
index e3a427b..47fe4ad 100644
--- a/Lucene.Net.sln
+++ b/Lucene.Net.sln
@@ -107,6 +107,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
 	ProjectSection(SolutionItems) = preProject
 		.asf.yaml = .asf.yaml
 		.editorconfig = .editorconfig
+		.rat-excludes = .rat-excludes
 		CHANGES.txt = CHANGES.txt
 		CONTRIBUTING.md = CONTRIBUTING.md
 		Directory.Build.props = Directory.Build.props

[lucenenet] 10/15: .build/runbuild.ps1: Track added files so they can be reverted if the build is cancelled

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit c47dd666db093621ac14280879da022bf24b295f
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 14:25:07 2022 +0700

    .build/runbuild.ps1: Track added files so they can be reverted if the build is cancelled
---
 .build/runbuild.ps1 | 41 ++++++++++++++++++++++++++++++++++++-----
 1 file changed, 36 insertions(+), 5 deletions(-)

diff --git a/.build/runbuild.ps1 b/.build/runbuild.ps1
index a62d460..f0c9f61 100644
--- a/.build/runbuild.ps1
+++ b/.build/runbuild.ps1
@@ -55,6 +55,7 @@ properties {
 }
 
 $backedUpFiles = New-Object System.Collections.ArrayList
+$addedFiles = New-Object System.Collections.ArrayList
 
 task default -depends Pack
 
@@ -143,6 +144,7 @@ task Compile -depends Clean, Init, Restore -description "This task compiles the
         $success = $true
     } finally {
         if ($success -ne $true) {
+            Delete-Added-Files $addedFiles
             Restore-Files $backedUpFiles
         }
     }
@@ -168,11 +170,8 @@ task Pack -depends Compile -description "This task creates the NuGet packages" {
         $success = $true
     } finally {
         #if ($success -ne $true) {
+            Delete-Added-Files $addedFiles
             Restore-Files $backedUpFiles
-            #Remove Version.props, as we don't want it to be committed to the repository
-            if ($backupFiles -eq $true -and (Test-Path -Path "$versionPropsFile") -eq $true) {
-                Remove-Item -Path "$versionPropsFile" -Force
-            }
         #}
     }
 }
@@ -246,6 +245,7 @@ task Publish -depends Compile -description "This task uses dotnet publish to pac
         $success = $true
     } finally {
         #if ($success -ne $true) {
+            Delete-Added-Files $addedFiles
             Restore-Files $backedUpFiles
         #}
     }
@@ -503,6 +503,7 @@ $fileText = "{
     Ensure-Directory-Exists $dir
 
     Write-Host "Generating global.json file: $(Normalize-FileSystemSlashes "$file")"
+    Track-Added-File $file
     Out-File -filePath $file -encoding UTF8 -inputObject $fileText
 }
 
@@ -543,6 +544,7 @@ $fileText = "<!--
     Ensure-Directory-Exists $dir
 
     Write-Host "Generating version.props file: $(Normalize-FileSystemSlashes "$file")"
+    Track-Added-File $file
     Out-File -filePath $file -encoding UTF8 -inputObject $fileText
 }
 
@@ -675,7 +677,7 @@ function Backup-File([string]$path) {
         Copy-Item $path "$path.bak" -Force
         $backedUpFiles.Insert(0, $path)
     } else {
-        Write-Host "Ignoring backup of file $path" -ForegroundColor DarkRed
+        Write-Host "Ignoring backup of file $(Normalize-FileSystemSlashes "$path")" -ForegroundColor DarkRed
     }
 }
 
@@ -694,6 +696,35 @@ function Restore-File([string]$path) {
     }
 }
 
+function Track-Added-Files([string[]]$paths) {
+    foreach ($path in $paths) {
+        Track-Added-File $path
+    }
+}
+
+function Track-Added-File([string]$path) {
+    if ($backupFiles -eq $true) {
+        $addedFiles.Insert(0, $path)
+    } else {
+        Write-Host "Ignoring tracking of file $(Normalize-FileSystemSlashes "$path")" -ForegroundColor DarkRed
+    }
+}
+
+function Delete-Added-Files([string[]]$paths) {
+    foreach ($path in $paths) {
+        Delete-Added-File $path
+    }
+}
+
+function Delete-Added-File([string]$path) {
+    if ($backupFiles -eq $true) {
+        if (Test-Path "$path") {
+            Remove-Item "$path" -Force
+        }
+        $addedFiles.Remove($path)
+    }
+}
+
 function Ensure-Directory-Exists([string] $path) {
     if (!(Test-Path $path)) {
         New-Item $path -ItemType Directory

[lucenenet] 09/15: show-all-files.yml: Removed invalid doc comment

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 71b981fc2c051fa54bd66624a9c6951287488ee3
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 12:04:38 2022 +0700

    show-all-files.yml: Removed invalid doc comment
---
 .build/azure-templates/show-all-files.yml | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/.build/azure-templates/show-all-files.yml b/.build/azure-templates/show-all-files.yml
index 78041e9..91db681 100644
--- a/.build/azure-templates/show-all-files.yml
+++ b/.build/azure-templates/show-all-files.yml
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one
+# Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
 # regarding copyright ownership.  The ASF licenses this file
@@ -15,10 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-# Downloads test binaries and executes tests using dotnet vstest,
-# runs the tests for each project on a background job in parallel,
-# then uploads the results to Azure DevOps pipelines
-
 # Writes all file names (from the parent directory) to the host (helpful for debugging)
 
 steps:

[lucenenet] 04/15: .gitattributes: Never checkout BASH scripts with Widows line endings

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 329c90addb12f8da63defcb8b3f160f932f64702
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 11:29:51 2022 +0700

    .gitattributes: Never checkout BASH scripts with Widows line endings
---
 .gitattributes | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 412eeda..6f5c6af 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,8 +1,8 @@
-# Auto detect text files and perform LF normalization
+# Auto detect text files and perform LF normalization
 * text=auto
 
 # Custom for Visual Studio
-*.cs     diff=csharp
+*.cs     eol=crlf diff=csharp
 *.sln    merge=union
 *.csproj merge=union
 *.vbproj merge=union
@@ -20,3 +20,9 @@
 *.PDF	 diff=astextplain
 *.rtf	 diff=astextplain
 *.RTF	 diff=astextplain
+
+# Batch Files
+build eol=lf
+*.sh eol=lf
+*.bat eol=crlf
+*.cmd eol=crlf
\ No newline at end of file

[lucenenet] 02/15: .build: Upgraded psake build automation to 4.9.0

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit ba1052ece38bbdabdf9f73ad3d8f78fc4b1761ff
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Thu Jan 6 11:21:59 2022 +0700

    .build: Upgraded psake build automation to 4.9.0
---
 .build/psake.cmd                                   |   29 -
 .build/psake.ps1                                   |   53 -
 .build/psake.psd1                                  |   31 -
 .build/psake.psm1                                  |  925 --------
 .build/psake/LICENSE                               |   21 +
 .build/psake/en-US/psake.psm1-help.xml.old         | 2265 ++++++++++++++++++++
 .build/psake/private/CleanupEnvironment.ps1        |   12 +
 .build/psake/private/ConfigureBuildEnvironment.ps1 |  202 ++
 .../private/CreateConfigurationForNewContext.ps1   |   28 +
 .build/psake/private/ExecuteInBuildFileScope.ps1   |   58 +
 .build/psake/private/FormatErrorMessage.ps1        |   26 +
 .build/psake/private/Get-DefaultBuildFile.ps1      |   17 +
 .../private/GetCurrentConfigurationOrDefault.ps1   |    7 +
 .build/psake/private/GetTasksFromContext.ps1       |   15 +
 .build/psake/private/LoadConfiguration.ps1         |   31 +
 .build/psake/private/LoadModules.ps1               |   21 +
 .build/psake/private/ResolveError.ps1              |   62 +
 .build/psake/private/SelectObjectWithDefault.ps1   |   23 +
 .build/psake/private/Test-ModuleVersion.ps1        |  107 +
 .build/psake/private/WriteColoredOutput.ps1        |   20 +
 .build/psake/private/WriteDocumentation.ps1        |   26 +
 .build/psake/private/WriteTaskTimeSummary.ps1      |   34 +
 .build/psake/psake                                 |   12 +
 .build/psake/psake-config.ps1                      |   22 +
 .build/psake/psake.cmd                             |   14 +
 .build/psake/psake.ps1                             |   71 +
 .build/psake/psake.psd1                            |   33 +
 .build/psake/psake.psm1                            |  112 +
 .build/psake/public/Assert.ps1                     |   71 +
 .build/psake/public/BuildSetup.ps1                 |   55 +
 .build/psake/public/BuildTearDown.ps1              |   75 +
 .build/psake/public/Exec.ps1                       |  110 +
 .build/psake/public/FormatTaskName.ps1             |   95 +
 .build/psake/public/Framework.ps1                  |   55 +
 .build/psake/public/Get-PSakeScriptTasks.ps1       |   45 +
 .build/psake/public/Include.ps1                    |   64 +
 .build/psake/public/Invoke-Task.ps1                |  158 ++
 .build/psake/public/Invoke-psake.ps1               |  343 +++
 .build/psake/public/Properties.ps1                 |   61 +
 .build/psake/public/Task.ps1                       |  331 +++
 .build/psake/public/TaskSetup.ps1                  |  102 +
 .build/psake/public/TaskTearDown.ps1               |  107 +
 .build/psake/readme.md                             |   13 +
 .rat-excludes                                      |    1 +
 LICENSE.txt                                        |    5 +-
 Lucene.Net.sln                                     |   52 +
 azure-pipelines.yml                                |    2 +-
 build.bat                                          |    2 +-
 48 files changed, 4981 insertions(+), 1043 deletions(-)

diff --git a/.build/psake.cmd b/.build/psake.cmd
deleted file mode 100644
index beee3fa..0000000
--- a/.build/psake.cmd
+++ /dev/null
@@ -1,29 +0,0 @@
-@echo off
-REM  Licensed to the Apache Software Foundation (ASF) under one or more
-REM  contributor license agreements.  See the NOTICE file distributed with
-REM  this work for additional information regarding copyright ownership.
-REM  The ASF licenses this file to You under the Apache License, Version 2.0
-REM  (the "License"); you may not use this file except in compliance with
-REM  the License.  You may obtain a copy of the License at
-REM
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-
-rem Helper script for those who want to run psake from cmd.exe
-rem Example run from cmd.exe:
-rem psake "default.ps1" "BuildHelloWord" "4.0" 
-
-if '%1'=='/?' goto help
-if '%1'=='-help' goto help
-if '%1'=='-h' goto help
-
-powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0\psake.ps1' %*; if ($psake.build_success -eq $false) { exit 1 } else { exit 0 }"
-exit /B %errorlevel%
-
-:help
-powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0\psake.ps1' -help"
diff --git a/.build/psake.ps1 b/.build/psake.ps1
deleted file mode 100644
index 23c6f2d..0000000
--- a/.build/psake.ps1
+++ /dev/null
@@ -1,53 +0,0 @@
-# Helper script for those who want to run psake without importing the module.
-# Example run from PowerShell:
-# .\psake.ps1 "default.ps1" "BuildHelloWord" "4.0" 
-
-# Must match parameter definitions for psake.psm1/invoke-psake 
-# otherwise named parameter binding fails
-param(
-    [Parameter(Position=0,Mandatory=0)]
-    [string]$buildFile,
-    [Parameter(Position=1,Mandatory=0)]
-    [string[]]$taskList = @(),
-    [Parameter(Position=2,Mandatory=0)]
-    [string]$framework,
-    [Parameter(Position=3,Mandatory=0)]
-    [switch]$docs = $false,
-    [Parameter(Position=4,Mandatory=0)]
-    [System.Collections.Hashtable]$parameters = @{},
-    [Parameter(Position=5, Mandatory=0)]
-    [System.Collections.Hashtable]$properties = @{},
-    [Parameter(Position=6, Mandatory=0)]
-    [alias("init")]
-    [scriptblock]$initialization = {},
-    [Parameter(Position=7, Mandatory=0)]
-    [switch]$nologo = $false,
-    [Parameter(Position=8, Mandatory=0)]
-    [switch]$help = $false,
-    [Parameter(Position=9, Mandatory=0)]
-    [string]$scriptPath,
-    [Parameter(Position=10,Mandatory=0)]
-    [switch]$detailedDocs = $false
-)
-
-# setting $scriptPath here, not as default argument, to support calling as "powershell -File psake.ps1"
-if (!$scriptPath) {
-  $scriptPath = $(Split-Path -parent $MyInvocation.MyCommand.path)
-}
-
-# '[p]sake' is the same as 'psake' but $Error is not polluted
-remove-module [p]sake
-import-module (join-path $scriptPath psake.psm1)
-if ($help) {
-  Get-Help Invoke-psake -full
-  return
-}
-
-if ($buildFile -and (-not(test-path $buildFile))) {
-    $absoluteBuildFile = (join-path $scriptPath $buildFile)
-    if (test-path $absoluteBuildFile) {
-        $buildFile = $absoluteBuildFile
-    }
-} 
-
-Invoke-psake $buildFile $taskList $framework $docs $parameters $properties $initialization $nologo $detailedDocs
diff --git a/.build/psake.psd1 b/.build/psake.psd1
deleted file mode 100644
index 7e00532..0000000
--- a/.build/psake.psd1
+++ /dev/null
@@ -1,31 +0,0 @@
-@{
-    ModuleToProcess   = 'psake.psm1'
-    ModuleVersion     = '4.6.0'
-    GUID              = 'cfb53216-072f-4a46-8975-ff7e6bda05a5'
-    Author            = 'James Kovacs'
-    Copyright         = 'Copyright (c) 2012-16 James Kovacs, Damian Hickey and Contributors'
-    PowerShellVersion = '2.0'
-    Description       = 'psake is a build automation tool written in PowerShell.'
-    FunctionsToExport = @('Invoke-psake',
-                          'Invoke-Task',
-                          'Get-PSakeScriptTasks', 
-                          'Task',
-                          'Properties',
-                          'Include',
-                          'FormatTaskName',
-                          'TaskSetup',
-                          'TaskTearDown',
-                          'Framework',
-                          'Assert',
-                          'Exec')
-    VariablesToExport = 'psake'
-
-    PrivateData = @{
-        PSData = @{
-            LicenseUri = 'https://github.com/psake/psake/blob/master/license.txt'
-            ProjectUri = 'https://github.com/psake/psake'
-            Tags     = @('Build', 'Task')
-            IconUri  = 'https://raw.githubusercontent.com/psake/graphics/master/jpg/psake-full-icon-teal-bg-256x256.jpg'
-        }
-    }
-}
diff --git a/.build/psake.psm1 b/.build/psake.psm1
deleted file mode 100644
index e5f8f3c..0000000
--- a/.build/psake.psm1
+++ /dev/null
@@ -1,925 +0,0 @@
-# psake
-# Copyright (c) 2012 James Kovacs
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-#Requires -Version 2.0
-
-if ($PSVersionTable.PSVersion.Major -ge 3)
-{
-    $script:IgnoreError = 'Ignore'
-}
-else
-{
-    $script:IgnoreError = 'SilentlyContinue'
-}
-
-#-- Public Module Functions --#
-
-# .ExternalHelp  psake.psm1-help.xml
-function Invoke-Task
-{
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)] [string]$taskName
-    )
-
-    Assert $taskName ($msgs.error_invalid_task_name)
-
-    $taskKey = $taskName.ToLower()
-
-    if ($currentContext.aliases.Contains($taskKey)) {
-        $taskName = $currentContext.aliases.$taskKey.Name
-        $taskKey = $taskName.ToLower()
-    }
-
-    $currentContext = $psake.context.Peek()
-
-    Assert ($currentContext.tasks.Contains($taskKey)) ($msgs.error_task_name_does_not_exist -f $taskName)
-
-    if ($currentContext.executedTasks.Contains($taskKey))  { return }
-
-    Assert (!$currentContext.callStack.Contains($taskKey)) ($msgs.error_circular_reference -f $taskName)
-
-    $currentContext.callStack.Push($taskKey)
-
-    $task = $currentContext.tasks.$taskKey
-
-    $precondition_is_valid = & $task.Precondition
-
-    if (!$precondition_is_valid) {
-        WriteColoredOutput ($msgs.precondition_was_false -f $taskName) -foregroundcolor Cyan
-    } else {
-        if ($taskKey -ne 'default') {
-
-            if ($task.PreAction -or $task.PostAction) {
-                Assert ($task.Action -ne $null) ($msgs.error_missing_action_parameter -f $taskName)
-            }
-
-            if ($task.Action) {
-                try {
-                    foreach($childTask in $task.DependsOn) {
-                        Invoke-Task $childTask
-                    }
-
-                    $stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
-                    $currentContext.currentTaskName = $taskName
-
-                    & $currentContext.taskSetupScriptBlock
-
-                    if ($task.PreAction) {
-                        & $task.PreAction
-                    }
-
-                    if ($currentContext.config.taskNameFormat -is [ScriptBlock]) {
-                        & $currentContext.config.taskNameFormat $taskName
-                    } else {
-                        WriteColoredOutput ($currentContext.config.taskNameFormat -f $taskName) -foregroundcolor Cyan
-                    }
-
-                    foreach ($variable in $task.requiredVariables) {
-                        Assert ((test-path "variable:$variable") -and ((get-variable $variable).Value -ne $null)) ($msgs.required_variable_not_set -f $variable, $taskName)
-                    }
-
-                    & $task.Action
-
-                    if ($task.PostAction) {
-                        & $task.PostAction
-                    }
-
-                    & $currentContext.taskTearDownScriptBlock
-                    $task.Duration = $stopwatch.Elapsed
-                } catch {
-                    if ($task.ContinueOnError) {
-                        "-"*70
-                        WriteColoredOutput ($msgs.continue_on_error -f $taskName,$_) -foregroundcolor Yellow
-                        "-"*70
-                        $task.Duration = $stopwatch.Elapsed
-                    }  else {
-                        throw $_
-                    }
-                }
-            } else {
-                # no action was specified but we still execute all the dependencies
-                foreach($childTask in $task.DependsOn) {
-                    Invoke-Task $childTask
-                }
-            }
-        } else {
-            foreach($childTask in $task.DependsOn) {
-                Invoke-Task $childTask
-            }
-        }
-
-        Assert (& $task.Postcondition) ($msgs.postcondition_failed -f $taskName)
-    }
-
-    $poppedTaskKey = $currentContext.callStack.Pop()
-    Assert ($poppedTaskKey -eq $taskKey) ($msgs.error_corrupt_callstack -f $taskKey,$poppedTaskKey)
-
-    $currentContext.executedTasks.Push($taskKey)
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Exec
-{
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][scriptblock]$cmd,
-        [Parameter(Position=1,Mandatory=0)][string]$errorMessage = ($msgs.error_bad_command -f $cmd),
-        [Parameter(Position=2,Mandatory=0)][int]$maxRetries = 0,
-        [Parameter(Position=3,Mandatory=0)][string]$retryTriggerErrorPattern = $null
-    )
-
-    $tryCount = 1
-
-    do {
-        try {
-            $global:lastexitcode = 0
-            & $cmd
-            if ($lastexitcode -ne 0) {
-                throw ("Exec: " + $errorMessage)
-            }
-            break
-        }
-        catch [Exception]
-        {
-            if ($tryCount -gt $maxRetries) {
-                throw $_
-            }
-
-            if ($retryTriggerErrorPattern -ne $null) {
-                $isMatch = [regex]::IsMatch($_.Exception.Message, $retryTriggerErrorPattern)
-
-                if ($isMatch -eq $false) {
-                    throw $_
-                }
-            }
-
-            Write-Host "Try $tryCount failed, retrying again in 1 second..."
-
-            $tryCount++
-
-            [System.Threading.Thread]::Sleep([System.TimeSpan]::FromSeconds(1))
-        }
-    }
-    while ($true)
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Assert
-{
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)]$conditionToCheck,
-        [Parameter(Position=1,Mandatory=1)]$failureMessage
-    )
-    if (!$conditionToCheck) {
-        throw ("Assert: " + $failureMessage)
-    }
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Task
-{
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][string]$name = $null,
-        [Parameter(Position=1,Mandatory=0)][scriptblock]$action = $null,
-        [Parameter(Position=2,Mandatory=0)][scriptblock]$preaction = $null,
-        [Parameter(Position=3,Mandatory=0)][scriptblock]$postaction = $null,
-        [Parameter(Position=4,Mandatory=0)][scriptblock]$precondition = {$true},
-        [Parameter(Position=5,Mandatory=0)][scriptblock]$postcondition = {$true},
-        [Parameter(Position=6,Mandatory=0)][switch]$continueOnError = $false,
-        [Parameter(Position=7,Mandatory=0)][string[]]$depends = @(),
-        [Parameter(Position=8,Mandatory=0)][string[]]$requiredVariables = @(),
-        [Parameter(Position=9,Mandatory=0)][string]$description = $null,
-        [Parameter(Position=10,Mandatory=0)][string]$alias = $null
-    )
-    if ($name -eq 'default') {
-        Assert (!$action) ($msgs.error_default_task_cannot_have_action)
-    }
-
-    $newTask = @{
-        Name = $name
-        DependsOn = $depends
-        PreAction = $preaction
-        Action = $action
-        PostAction = $postaction
-        Precondition = $precondition
-        Postcondition = $postcondition
-        ContinueOnError = $continueOnError
-        Description = $description
-        Duration = [System.TimeSpan]::Zero
-        RequiredVariables = $requiredVariables
-        Alias = $alias
-    }
-
-    $taskKey = $name.ToLower()
-
-    $currentContext = $psake.context.Peek()
-
-    Assert (!$currentContext.tasks.ContainsKey($taskKey)) ($msgs.error_duplicate_task_name -f $name)
-
-    $currentContext.tasks.$taskKey = $newTask
-
-    if($alias)
-    {
-        $aliasKey = $alias.ToLower()
-
-        Assert (!$currentContext.aliases.ContainsKey($aliasKey)) ($msgs.error_duplicate_alias_name -f $alias)
-
-        $currentContext.aliases.$aliasKey = $newTask
-    }
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Properties {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][scriptblock]$properties
-    )
-    $psake.context.Peek().properties += $properties
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Include {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][string]$fileNamePathToInclude
-    )
-    Assert (test-path $fileNamePathToInclude -pathType Leaf) ($msgs.error_invalid_include_path -f $fileNamePathToInclude)
-    $psake.context.Peek().includes.Enqueue((Resolve-Path $fileNamePathToInclude));
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function FormatTaskName {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)]$format
-    )
-    $psake.context.Peek().config.taskNameFormat = $format
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function TaskSetup {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][scriptblock]$setup
-    )
-    $psake.context.Peek().taskSetupScriptBlock = $setup
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function TaskTearDown {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][scriptblock]$teardown
-    )
-    $psake.context.Peek().taskTearDownScriptBlock = $teardown
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Framework {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position=0,Mandatory=1)][string]$framework
-    )
-    $psake.context.Peek().config.framework = $framework
-    ConfigureBuildEnvironment
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Get-PSakeScriptTasks {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position = 0, Mandatory = 0)][string] $buildFile
-    )
-
-    if (!$buildFile) {
-        $buildFile = $psake.config_default.buildFileName
-    }
-
-    try
-    {
-        ExecuteInBuildFileScope $buildFile $MyInvocation.MyCommand.Module {
-            param($currentContext, $module)
-            return GetTasksFromContext $currentContext
-        }
-
-    } finally {
-
-        CleanupEnvironment
-    }
-}
-
-# .ExternalHelp  psake.psm1-help.xml
-function Invoke-psake {
-    [CmdletBinding()]
-    param(
-        [Parameter(Position = 0, Mandatory = 0)][string] $buildFile,
-        [Parameter(Position = 1, Mandatory = 0)][string[]] $taskList = @(),
-        [Parameter(Position = 2, Mandatory = 0)][string] $framework,
-        [Parameter(Position = 3, Mandatory = 0)][switch] $docs = $false,
-        [Parameter(Position = 4, Mandatory = 0)][hashtable] $parameters = @{},
-        [Parameter(Position = 5, Mandatory = 0)][hashtable] $properties = @{},
-        [Parameter(Position = 6, Mandatory = 0)][alias("init")][scriptblock] $initialization = {},
-        [Parameter(Position = 7, Mandatory = 0)][switch] $nologo = $false,
-        [Parameter(Position = 8, Mandatory = 0)][switch] $detailedDocs = $false,
-        [Parameter(Position = 9, Mandatory = 0)][switch] $notr = $false # disable time report
-    )
-    try {
-        if (-not $nologo) {
-            "psake version {0}`nCopyright (c) 2010-2014 James Kovacs & Contributors`n" -f $psake.version
-        }
-
-        if (!$buildFile) {
-          $buildFile = $psake.config_default.buildFileName
-        }
-        elseif (!(test-path $buildFile -pathType Leaf) -and (test-path $psake.config_default.buildFileName -pathType Leaf)) {
-            # If the $config.buildFileName file exists and the given "buildfile" isn 't found assume that the given
-            # $buildFile is actually the target Tasks to execute in the $config.buildFileName script.
-            $taskList = $buildFile.Split(', ')
-            $buildFile = $psake.config_default.buildFileName
-        }
-
-        ExecuteInBuildFileScope $buildFile $MyInvocation.MyCommand.Module {
-            param($currentContext, $module)            
-
-            $stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
-            
-            if ($docs -or $detailedDocs) {
-                WriteDocumentation($detailedDocs)
-                return
-            }
-            
-            foreach ($key in $parameters.keys) {
-                if (test-path "variable:\$key") {
-                    set-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null
-                } else {
-                    new-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null
-                }
-            }
-            
-            # The initial dot (.) indicates that variables initialized/modified in the propertyBlock are available in the parent scope.
-            foreach ($propertyBlock in $currentContext.properties) {
-                . $propertyBlock
-            }
-            
-            foreach ($key in $properties.keys) {
-                if (test-path "variable:\$key") {
-                    set-item -path "variable:\$key" -value $properties.$key -WhatIf:$false -Confirm:$false | out-null
-                }
-            }
-            
-            # Simple dot sourcing will not work. We have to force the script block into our
-            # module's scope in order to initialize variables properly.
-            . $module $initialization
-            
-            # Execute the list of tasks or the default task
-            if ($taskList) {
-                foreach ($task in $taskList) {
-                    invoke-task $task
-                }
-            } elseif ($currentContext.tasks.default) {
-                invoke-task default
-            } else {
-                throw $msgs.error_no_default_task
-            }
-            
-            WriteColoredOutput ("`n" + $msgs.build_success + "`n") -foregroundcolor Green
-            
-            $stopwatch.Stop()
-            if (-not $notr) {
-                WriteTaskTimeSummary $stopwatch.Elapsed
-            }
-        }
-
-        $psake.build_success = $true
-
-    } catch {
-        $currentConfig = GetCurrentConfigurationOrDefault
-        if ($currentConfig.verboseError) {
-            $error_message = "{0}: An Error Occurred. See Error Details Below: `n" -f (Get-Date)
-            $error_message += ("-" * 70) + "`n"
-            $error_message += "Error: {0}`n" -f (ResolveError $_ -Short)
-            $error_message += ("-" * 70) + "`n"
-            $error_message += ResolveError $_
-            $error_message += ("-" * 70) + "`n"
-            $error_message += "Script Variables" + "`n"
-            $error_message += ("-" * 70) + "`n"
-            $error_message += get-variable -scope script | format-table | out-string
-        } else {
-            # ($_ | Out-String) gets error messages with source information included.
-            $error_message = "Error: {0}: `n{1}" -f (Get-Date), (ResolveError $_ -Short)
-        }
-
-        $psake.build_success = $false
-
-        # if we are running in a nested scope (i.e. running a psake script from a psake script) then we need to re-throw the exception
-        # so that the parent script will fail otherwise the parent script will report a successful build
-        $inNestedScope = ($psake.context.count -gt 1)
-        if ( $inNestedScope ) {
-            throw $_
-        } else {
-            if (!$psake.run_by_psake_build_tester) {
-                WriteColoredOutput $error_message -foregroundcolor Red
-            }
-        }
-    } finally {
-        CleanupEnvironment
-    }
-}
-
-#-- Private Module Functions --#
-function WriteColoredOutput {
-    param(
-        [string] $message,
-        [System.ConsoleColor] $foregroundcolor
-    )
-
-    $currentConfig = GetCurrentConfigurationOrDefault
-    if ($currentConfig.coloredOutput -eq $true) {
-        if (($Host.UI -ne $null) -and ($Host.UI.RawUI -ne $null) -and ($Host.UI.RawUI.ForegroundColor -ne $null)) {
-            $previousColor = $Host.UI.RawUI.ForegroundColor
-            $Host.UI.RawUI.ForegroundColor = $foregroundcolor
-        }
-    }
-
-    $message
-
-    if ($previousColor -ne $null) {
-        $Host.UI.RawUI.ForegroundColor = $previousColor
-    }
-}
-
-function LoadModules {
-    $currentConfig = $psake.context.peek().config
-    if ($currentConfig.modules) {
-
-        $scope = $currentConfig.moduleScope
-
-        $global = [string]::Equals($scope, "global", [StringComparison]::CurrentCultureIgnoreCase)
-
-        $currentConfig.modules | foreach {
-            resolve-path $_ | foreach {
-                "Loading module: $_"
-                $module = import-module $_ -passthru -DisableNameChecking -global:$global
-                if (!$module) {
-                    throw ($msgs.error_loading_module -f $_.Name)
-                }
-            }
-        }
-        ""
-    }
-}
-
-function LoadConfiguration {
-    param(
-        [string] $configdir = $PSScriptRoot
-    )
-
-    $psakeConfigFilePath = (join-path $configdir "psake-config.ps1")
-
-    if (test-path $psakeConfigFilePath -pathType Leaf) {
-        try {
-            $config = GetCurrentConfigurationOrDefault
-            . $psakeConfigFilePath
-        } catch {
-            throw "Error Loading Configuration from psake-config.ps1: " + $_
-        }
-    }
-}
-
-function GetCurrentConfigurationOrDefault() {
-    if ($psake.context.count -gt 0) {
-        return $psake.context.peek().config
-    } else {
-        return $psake.config_default
-    }
-}
-
-function CreateConfigurationForNewContext {
-    param(
-        [string] $buildFile,
-        [string] $framework
-    )
-
-    $previousConfig = GetCurrentConfigurationOrDefault
-
-    $config = new-object psobject -property @{
-        buildFileName = $previousConfig.buildFileName;
-        framework = $previousConfig.framework;
-        taskNameFormat = $previousConfig.taskNameFormat;
-        verboseError = $previousConfig.verboseError;
-        coloredOutput = $previousConfig.coloredOutput;
-        modules = $previousConfig.modules;
-        moduleScope =  $previousConfig.moduleScope;
-    }
-
-    if ($framework) {
-        $config.framework = $framework;
-    }
-
-    if ($buildFile) {
-        $config.buildFileName = $buildFile;
-    }
-
-    return $config
-}
-
-function ConfigureBuildEnvironment {
-    $framework = $psake.context.peek().config.framework
-    if ($framework -cmatch '^((?:\d+\.\d+)(?:\.\d+){0,1})(x86|x64){0,1}$') {
-        $versionPart = $matches[1]
-        $bitnessPart = $matches[2]
-    } else {
-        throw ($msgs.error_invalid_framework -f $framework)
-    }
-    $versions = $null
-    $buildToolsVersions = $null
-    switch ($versionPart) {
-        '1.0' {
-            $versions = @('v1.0.3705')
-        }
-        '1.1' {
-            $versions = @('v1.1.4322')
-        }
-        '2.0' {
-            $versions = @('v2.0.50727')
-        }
-        '3.0' {
-            $versions = @('v2.0.50727')
-        }
-        '3.5' {
-            $versions = @('v3.5', 'v2.0.50727')
-        }
-        '4.0' {
-            $versions = @('v4.0.30319')
-        }
-        {($_ -eq '4.5.1') -or ($_ -eq '4.5.2')} {
-            $versions = @('v4.0.30319')
-            $buildToolsVersions = @('14.0', '12.0')
-        }
-        {($_ -eq '4.6') -or ($_ -eq '4.6.1')} {
-            $versions = @('v4.0.30319')
-            $buildToolsVersions = @('14.0')
-        }
-
-        default {
-            throw ($msgs.error_unknown_framework -f $versionPart, $framework)
-        }
-    }
-
-    $bitness = 'Framework'
-    if ($versionPart -ne '1.0' -and $versionPart -ne '1.1') {
-        switch ($bitnessPart) {
-            'x86' {
-                $bitness = 'Framework'
-                $buildToolsKey = 'MSBuildToolsPath32'
-            }
-            'x64' {
-                $bitness = 'Framework64'
-                $buildToolsKey = 'MSBuildToolsPath'
-            }
-            { [string]::IsNullOrEmpty($_) } {
-                $ptrSize = [System.IntPtr]::Size
-                switch ($ptrSize) {
-                    4 {
-                        $bitness = 'Framework'
-                        $buildToolsKey = 'MSBuildToolsPath32'
-                    }
-                    8 {
-                        $bitness = 'Framework64'
-                        $buildToolsKey = 'MSBuildToolsPath'
-                    }
-                    default {
-                        throw ($msgs.error_unknown_pointersize -f $ptrSize)
-                    }
-                }
-            }
-            default {
-                throw ($msgs.error_unknown_bitnesspart -f $bitnessPart, $framework)
-            }
-        }
-    }
-    $frameworkDirs = @()
-    if ($buildToolsVersions -ne $null) {
-        foreach($ver in $buildToolsVersions) {
-            if (Test-Path "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\$ver") {
-                $frameworkDirs += (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\$ver" -Name $buildToolsKey).$buildToolsKey
-            }
-        }
-    }
-    $frameworkDirs = $frameworkDirs + @($versions | foreach { "$env:windir\Microsoft.NET\$bitness\$_\" })
-
-    for ($i = 0; $i -lt $frameworkDirs.Count; $i++) {
-        $dir = $frameworkDirs[$i]
-        if ($dir -Match "\$\(Registry:HKEY_LOCAL_MACHINE(.*?)@(.*)\)") {
-            $key = "HKLM:" + $matches[1]
-            $name = $matches[2]
-            $dir = (Get-ItemProperty -Path $key -Name $name).$name
-            $frameworkDirs[$i] = $dir
-        }
-    }
-
-    $frameworkDirs | foreach { Assert (test-path $_ -pathType Container) ($msgs.error_no_framework_install_dir_found -f $_)}
-
-    $env:path = ($frameworkDirs -join ";") + ";$env:path"
-    # if any error occurs in a PS function then "stop" processing immediately
-    # this does not effect any external programs that return a non-zero exit code
-    $global:ErrorActionPreference = "Stop"
-}
-
-function ExecuteInBuildFileScope {    
-    param([string]$buildFile, $module, [scriptblock]$sb)
-    
-    # Execute the build file to set up the tasks and defaults
-    Assert (test-path $buildFile -pathType Leaf) ($msgs.error_build_file_not_found -f $buildFile)
-
-    $psake.build_script_file = get-item $buildFile
-    $psake.build_script_dir = $psake.build_script_file.DirectoryName
-    $psake.build_success = $false
-
-    $psake.context.push(@{
-        "taskSetupScriptBlock" = {};
-        "taskTearDownScriptBlock" = {};
-        "executedTasks" = new-object System.Collections.Stack;
-        "callStack" = new-object System.Collections.Stack;
-        "originalEnvPath" = $env:path;
-        "originalDirectory" = get-location;
-        "originalErrorActionPreference" = $global:ErrorActionPreference;
-        "tasks" = @{};
-        "aliases" = @{};
-        "properties" = @();
-        "includes" = new-object System.Collections.Queue;
-        "config" = CreateConfigurationForNewContext $buildFile $framework
-    })
-
-    LoadConfiguration $psake.build_script_dir
-
-    set-location $psake.build_script_dir
-
-    LoadModules
-
-    $frameworkOldValue = $framework
-    . $psake.build_script_file.FullName
-
-    $currentContext = $psake.context.Peek()
-
-    if ($framework -ne $frameworkOldValue) {
-        writecoloredoutput $msgs.warning_deprecated_framework_variable -foregroundcolor Yellow
-        $currentContext.config.framework = $framework
-    }
-
-    ConfigureBuildEnvironment
-
-    while ($currentContext.includes.Count -gt 0) {
-        $includeFilename = $currentContext.includes.Dequeue()
-        . $includeFilename
-    }
-
-    & $sb $currentContext $module
-}
-
-function CleanupEnvironment {
-    if ($psake.context.Count -gt 0) {
-        $currentContext = $psake.context.Peek()
-        $env:path = $currentContext.originalEnvPath
-        Set-Location $currentContext.originalDirectory
-        $global:ErrorActionPreference = $currentContext.originalErrorActionPreference
-        [void] $psake.context.Pop()
-    }
-}
-
-function SelectObjectWithDefault
-{
-    [CmdletBinding()]
-    param(
-        [Parameter(ValueFromPipeline=$true)]
-        [PSObject]
-        $InputObject,
-        [string]
-        $Name,
-        $Value
-    )
-
-    process {
-        if ($_ -eq $null) { $Value }
-        elseif ($_ | Get-Member -Name $Name) {
-          $_.$Name
-        }
-        elseif (($_ -is [Hashtable]) -and ($_.Keys -contains $Name)) {
-          $_.$Name
-        }
-        else { $Value }
-    }
-}
-
-# borrowed from Jeffrey Snover http://blogs.msdn.com/powershell/archive/2006/12/07/resolve-error.aspx
-# modified to better handle SQL errors
-function ResolveError
-{
-    [CmdletBinding()]
-    param(
-        [Parameter(ValueFromPipeline=$true)]
-        $ErrorRecord=$Error[0],
-        [Switch]
-        $Short
-    )
-
-    process {
-        if ($_ -eq $null) { $_ = $ErrorRecord }
-        $ex = $_.Exception
-
-        if (-not $Short) {
-            $error_message = "`nErrorRecord:{0}ErrorRecord.InvocationInfo:{1}Exception:`n{2}"
-            $formatted_errorRecord = $_ | format-list * -force | out-string
-            $formatted_invocationInfo = $_.InvocationInfo | format-list * -force | out-string
-            $formatted_exception = ''
-
-            $i = 0
-            while ($ex -ne $null) {
-                $i++
-                $formatted_exception += ("$i" * 70) + "`n" +
-                    ($ex | format-list * -force | out-string) + "`n"
-                $ex = $ex | SelectObjectWithDefault -Name 'InnerException' -Value $null
-            }
-
-            return $error_message -f $formatted_errorRecord, $formatted_invocationInfo, $formatted_exception
-        }
-
-        $lastException = @()
-        while ($ex -ne $null) {
-            $lastMessage = $ex | SelectObjectWithDefault -Name 'Message' -Value ''
-            $lastException += ($lastMessage -replace "`n", '')
-            if ($ex -is [Data.SqlClient.SqlException]) {
-                $lastException += "(Line [$($ex.LineNumber)] " +
-                    "Procedure [$($ex.Procedure)] Class [$($ex.Class)] " +
-                    " Number [$($ex.Number)] State [$($ex.State)] )"
-            }
-            $ex = $ex | SelectObjectWithDefault -Name 'InnerException' -Value $null
-        }
-        $shortException = $lastException -join ' --> '
-
-        $header = $null
-        $current = $_
-        $header = (($_.InvocationInfo |
-            SelectObjectWithDefault -Name 'PositionMessage' -Value '') -replace "`n", ' '),
-            ($_ | SelectObjectWithDefault -Name 'Message' -Value ''),
-            ($_ | SelectObjectWithDefault -Name 'Exception' -Value '') |
-                ? { -not [String]::IsNullOrEmpty($_) } |
-                Select -First 1
-
-        $delimiter = ''
-        if ((-not [String]::IsNullOrEmpty($header)) -and
-            (-not [String]::IsNullOrEmpty($shortException)))
-            { $delimiter = ' [<<==>>] ' }
-
-        return "$($header)$($delimiter)Exception: $($shortException)"
-    }
-}
-
-function GetTasksFromContext($currentContext) {    
-
-    $docs = $currentContext.tasks.Keys | foreach-object {
-
-        $task = $currentContext.tasks.$_
-        new-object PSObject -property @{
-            Name = $task.Name;
-            Alias = $task.Alias;
-            Description = $task.Description;
-            DependsOn = $task.DependsOn;
-        }
-    }
-
-    return $docs
-}
-
-function WriteDocumentation($showDetailed) {
-
-    $currentContext = $psake.context.Peek()
-
-    if ($currentContext.tasks.default) {
-        $defaultTaskDependencies = $currentContext.tasks.default.DependsOn
-    } else {
-        $defaultTaskDependencies = @()
-    }
-    
-    $docs = GetTasksFromContext $currentContext | 
-                Where   {$_.Name -ne 'default'} | 
-                ForEach {
-                    $isDefault = $null
-                    if ($defaultTaskDependencies -contains $_.Name) { 
-                        $isDefault = $true 
-                    }
-                    return Add-Member -InputObject $_ 'Default' $isDefault -PassThru
-                }
-
-    if ($showDetailed) {
-        $docs | sort 'Name' | format-list -property Name,Alias,Description,@{Label="Depends On";Expression={$_.DependsOn -join ', '}},Default
-    } else {
-        $docs | sort 'Name' | format-table -autoSize -wrap -property Name,Alias,@{Label="Depends On";Expression={$_.DependsOn -join ', '}},Default,Description
-    }
-}
-
-function WriteTaskTimeSummary($invokePsakeDuration) {
-    if ($psake.context.count -gt 0) {
-        "-" * 70
-        "Build Time Report"
-        "-" * 70
-        $list = @()
-        $currentContext = $psake.context.Peek()
-        while ($currentContext.executedTasks.Count -gt 0) {
-            $taskKey = $currentContext.executedTasks.Pop()
-            $task = $currentContext.tasks.$taskKey
-            if ($taskKey -eq "default") {
-                continue
-            }
-            $list += new-object PSObject -property @{
-                Name = $task.Name;
-                Duration = $task.Duration
-            }
-        }
-        [Array]::Reverse($list)
-        $list += new-object PSObject -property @{
-            Name = "Total:";
-            Duration = $invokePsakeDuration
-        }
-        # using "out-string | where-object" to filter out the blank line that format-table prepends
-        $list | format-table -autoSize -property Name,Duration | out-string -stream | where-object { $_ }
-    }
-}
-
-DATA msgs {
-convertfrom-stringdata @'
-    error_invalid_task_name = Task name should not be null or empty string.
-    error_task_name_does_not_exist = Task {0} does not exist.
-    error_circular_reference = Circular reference found for task {0}.
-    error_missing_action_parameter = Action parameter must be specified when using PreAction or PostAction parameters for task {0}.
-    error_corrupt_callstack = Call stack was corrupt. Expected {0}, but got {1}.
-    error_invalid_framework = Invalid .NET Framework version, {0} specified.
-    error_unknown_framework = Unknown .NET Framework version, {0} specified in {1}.
-    error_unknown_pointersize = Unknown pointer size ({0}) returned from System.IntPtr.
-    error_unknown_bitnesspart = Unknown .NET Framework bitness, {0}, specified in {1}.
-    error_no_framework_install_dir_found = No .NET Framework installation directory found at {0}.
-    error_bad_command = Error executing command {0}.
-    error_default_task_cannot_have_action = 'default' task cannot specify an action.
-    error_duplicate_task_name = Task {0} has already been defined.
-    error_duplicate_alias_name = Alias {0} has already been defined.
-    error_invalid_include_path = Unable to include {0}. File not found.
-    error_build_file_not_found = Could not find the build file {0}.
-    error_no_default_task = 'default' task required.
-    error_loading_module = Error loading module {0}.
-    warning_deprecated_framework_variable = Warning: Using global variable $framework to set .NET framework version used is deprecated. Instead use Framework function or configuration file psake-config.ps1.
-    required_variable_not_set = Variable {0} must be set to run task {1}.
-    postcondition_failed = Postcondition failed for task {0}.
-    precondition_was_false = Precondition was false, not executing task {0}.
-    continue_on_error = Error in task {0}. {1}
-    build_success = Build Succeeded!
-'@
-}
-
-Import-LocalizedData -BindingVariable msgs -FileName messages.psd1 -ErrorAction $script:IgnoreError
-
-$scriptDir = Split-Path $MyInvocation.MyCommand.Path
-$manifestPath = Join-Path $scriptDir psake.psd1
-$manifest = Test-ModuleManifest -Path $manifestPath -WarningAction SilentlyContinue
-
-$script:psake = @{}
-
-$psake.version = $manifest.Version.ToString()
-$psake.context = new-object system.collections.stack # holds onto the current state of all variables
-$psake.run_by_psake_build_tester = $false # indicates that build is being run by psake-BuildTester
-$psake.config_default = new-object psobject -property @{
-    buildFileName = "default.ps1";
-    framework = "4.0";
-    taskNameFormat = "Executing {0}";
-    verboseError = $false;
-    coloredOutput = $true;
-    modules = $null;
-    moduleScope = "";
-} # contains default configuration, can be overriden in psake-config.ps1 in directory with psake.psm1 or in directory with current build script
-
-$psake.build_success = $false # indicates that the current build was successful
-$psake.build_script_file = $null # contains a System.IO.FileInfo for the current build script
-$psake.build_script_dir = "" # contains a string with fully-qualified path to current build script
-
-LoadConfiguration
-
-export-modulemember -function Invoke-psake, Invoke-Task, Get-PSakeScriptTasks, Task, Properties, Include, FormatTaskName, TaskSetup, TaskTearDown, Framework, Assert, Exec -variable psake
diff --git a/.build/psake/LICENSE b/.build/psake/LICENSE
new file mode 100644
index 0000000..154b4e6
--- /dev/null
+++ b/.build/psake/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2012-2018 James Kovacs, Damian Hickey, Brandon Olin, and Contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/.build/psake/en-US/psake.psm1-help.xml.old b/.build/psake/en-US/psake.psm1-help.xml.old
new file mode 100644
index 0000000..d67c446
--- /dev/null
+++ b/.build/psake/en-US/psake.psm1-help.xml.old
@@ -0,0 +1,2265 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<helpItems schema="maml">
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Invoke-psake</command:name>
+      <maml:description>
+        <maml:para>Runs a psake build script.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb>Invoke</command:verb>
+      <command:noun>psake</command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This function runs a psake build script</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Invoke-psake</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>buildFile</maml:name>
+          <command:parameterValue required="false" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>taskList</maml:name>
+          <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>framework</maml:name>
+          <command:parameterValue required="false" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>docs</maml:name>
+          <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>parameters</maml:name>
+          <command:parameterValue required="false" variableLength="false">Hashtable</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>properties</maml:name>
+          <command:parameterValue required="false" variableLength="false">Hashtable</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>nologo</maml:name>
+          <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>notr</maml:name>
+          <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+        </command:parameter>
+      </command:syntaxItem>
+    </command:syntax>
+    <command:parameters>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>buildFile</maml:name>
+        <maml:description>
+          <maml:para>The path to the psake build script to execute</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue>'psakefile.ps1'</dev:defaultValue>
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="1">
+        <maml:name>taskList</maml:name>
+        <maml:description>
+          <maml:para>A comma-separated list of task names to execute</maml:para>
+        </maml:description>
+        <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+        <dev:type>
+          <maml:name>String[]</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue />
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="2">
+        <maml:name>framework</maml:name>
+       <maml:description>
+            <maml:para>The version of the .NET framework you want to use during build. You can append x86 or x64 to force a specific framework. If not specified, x86 or x64 will be detected based on the bitness of the PowerShell process.
+Possible values: '1.0', '1.1', '2.0', '2.0x86', '2.0x64', '3.0', '3.0x86', '3.0x64', '3.5', '3.5x86', '3.5x64', '4.0', '4.0x86', '4.0x64', '4.5', '4.5x86', '4.5x64', '4.5.1', '4.5.1x86', '4.5.1x64'</maml:para>
+          </maml:description>
+        <command:parameterValue required="false" variableLength="false">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue>'3.5'</dev:defaultValue>
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="3">
+        <maml:name>docs</maml:name>
+        <maml:description>
+            <maml:para>Prints a list of tasks and their descriptions</maml:para>
+          </maml:description>
+        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+        <dev:type>
+          <maml:name>SwitchParameter</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue />
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="4">
+        <maml:name>parameters</maml:name>
+         <maml:description>
+            <maml:para>A hashtable containing parameters to be passed into the current build script.  These parameters will be processed before the 'Properties' function of the script is processed.  This means you can access parameters from within the 'Properties' function!
+</maml:para>
+          </maml:description>
+        <command:parameterValue required="false" variableLength="false">Hashtable</command:parameterValue>
+        <dev:type>
+          <maml:name>Hashtable</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue />
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="5">
+        <maml:name>properties</maml:name>
+         <maml:description>
+            <maml:para>A hashtable containing properties to be passed into the current build script.  These properties will override matching properties that are found in the 'Properties' function of the script.</maml:para>
+          </maml:description>
+        <command:parameterValue required="false" variableLength="false">Hashtable</command:parameterValue>
+        <dev:type>
+          <maml:name>Hashtable</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue />
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="6">
+        <maml:name>nologo</maml:name>
+         <maml:description>
+            <maml:para>Do not display the startup banner and copyright message.</maml:para>
+          </maml:description>
+        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+        <dev:type>
+          <maml:name>SwitchParameter</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue />
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="6">
+        <maml:name>notr</maml:name>
+         <maml:description>
+            <maml:para>Do not display the time report.</maml:para>
+          </maml:description>
+        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+        <dev:type>
+          <maml:name>SwitchParameter</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue />
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+      <maml:alert>
+    <maml:para>---- Exceptions ----</maml:para>
+    <maml:para>If there is an exception thrown during the running of a build script psake will set the '$psake.build_success' variable to $false. To detect failue outside PowerShell (for example by build server), finish PowerShell process with non-zero exit code when '$psake.build_success' is $false. Calling psake from 'cmd.exe' with 'psake.cmd' will give you that behaviour.</maml:para>
+    <maml:para></maml:para>
+    </maml:alert>
+    <maml:alert>
+    <maml:para>---- $psake variable ----</maml:para>
+        <maml:para>When the psake module is loaded a variable called $psake is created which is a hashtable
+containing some variables:
+
+$psake.version                      # contains the current version of psake
+$psake.context                      # holds onto the current state of all variables
+$psake.run_by_psake_build_tester    # indicates that build is being run by psake-BuildTester
+$psake.config_default               # contains default configuration
+                                    # can be overriden in psake-config.ps1 in directory with psake.psm1 or in directory with current build script
+$psake.build_success                # indicates that the current build was successful
+$psake.build_script_file            # contains a System.IO.FileInfo for the current build script
+$psake.build_script_dir             # contains the fully qualified path to the current build script
+
+You should see the following when you display the contents of the $psake variable right after importing psake
+
+PS projects:\psake> Import-Module .\psake.psm1
+PS projects:\psake> $psake
+
+Name                           Value
+----                           -----
+run_by_psake_build_tester      False
+version                        4.2
+build_success                  False
+build_script_file
+build_script_dir
+config_default                 @{framework=3.5; ...
+context                        {}
+
+After a build is executed the following $psake values are updated: build_script_file, build_script_dir, build_success
+
+PS projects:\psake> Invoke-psake .\examples\psakefile.ps1
+Executing task: Clean
+Executed Clean!
+Executing task: Compile
+Executed Compile!
+Executing task: Test
+Executed Test!
+
+Build Succeeded!
+
+----------------------------------------------------------------------
+Build Time Report
+----------------------------------------------------------------------
+Name    Duration
+----    --------
+Clean   00:00:00.0798486
+Compile 00:00:00.0869948
+Test    00:00:00.0958225
+Total:  00:00:00.2712414
+
+PS projects:\psake> $psake
+
+Name                           Value
+----                           -----
+build_script_file              YOUR_PATH\examples\psakefile.ps1
+run_by_psake_build_tester      False
+build_script_dir               YOUR_PATH\examples
+context                        {}
+version                        4.2
+build_success                  True
+config_default                 @{framework=3.5; ...
+
+</maml:para>
+  <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>Runs the 'default' task in the '.build.ps1' build script</maml:para>
+          <maml:para />
+          <maml:para />
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    <command:example>
+        <maml:title>--------------  EXAMPLE 2 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake '.\build.ps1' Tests,Package</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>Runs the 'Tests' and 'Package' tasks in the '.build.ps1' build script</maml:para>
+          <maml:para />
+          <maml:para />
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    <command:example>
+        <maml:title>--------------  EXAMPLE 3 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake Tests</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>This example will run the 'Tests' tasks in the 'psakefile.ps1' build script.  The 'psakefile.ps1' is assumed to be in the current directory.</maml:para>
+          <maml:para />
+          <maml:para />
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    <command:example>
+        <maml:title>--------------  EXAMPLE 4 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake 'Tests, Package'</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>This example will run the 'Tests' and 'Package' tasks in the 'psakefile.ps1' build script. The 'psakefile.ps1' is assumed to be in the current directory.</maml:para>
+          <maml:para>NOTE: The quotes around the list of tasks to execute is required if you want to execute more than 1 task.</maml:para>
+          <maml:para />
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+     <command:example>
+        <maml:title>--------------  EXAMPLE 5 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake .\build.ps1 -docs</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>Prints a report of all the tasks and their dependencies and descriptions and then exits</maml:para>
+          <maml:para />
+          <maml:para />
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+     <command:example>
+        <maml:title>--------------  EXAMPLE 6 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake .\parameters.ps1 -parameters @{"p1"="v1";"p2"="v2"}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>Runs the build script called 'parameters.ps1' and passes in parameters 'p1' and 'p2' with values 'v1' and 'v2'</maml:para>
+          <maml:para>Here's the .\parameters.ps1 build script:</maml:para>
+      <maml:para />
+      <maml:para>
+      properties {
+  $my_property = $p1 + $p2
+}
+
+task default -depends TestParams
+
+task TestParams {
+  Assert ($my_property -ne $null) '$my_property should not be null'
+}</maml:para>
+          <maml:para />
+      <maml:para>Notice how you can refer to the parameters that were passed into the script from within the “properties” function. The value of the $p1 variable should be the string “v1” and the value of the $p2 variable should be “v2”.</maml:para>
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    <command:example>
+        <maml:title>--------------  EXAMPLE 7 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-psake .\properties.ps1 -properties @{"x"="1";"y"="2"}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>Runs the build script called 'properties.ps1' and passes in parameters 'x' and 'y' with values '1' and '2'</maml:para>
+      <maml:para>This feature allows you to over-ride existing properties in your build script.</maml:para>
+          <maml:para />
+      <maml:para>Here's the .\properties.ps1 build script</maml:para>
+          <maml:para>properties {
+  $x = $null
+  $y = $null
+  $z = $null
+}
+
+task default -depends TestProperties
+
+task TestProperties {
+  Assert ($x -ne $null) "x should not be null"
+  Assert ($y -ne $null) "y should not be null"
+  Assert ($z -eq $null) "z should be null"
+}
+</maml:para>
+    <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>TaskTearDown</command:name>
+      <maml:description>
+        <maml:para>Adds a scriptblock to the build that will be executed after each task</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This function will accept a scriptblock that will be executed after each
+task in the build script.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>TaskTearDown</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>teardown</maml:name>
+          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>teardown</maml:name>
+        <maml:description>
+          <maml:para>A scriptblock to execute</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        <dev:type>
+          <maml:name>ScriptBlock</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script is shown below:
+
+Task default -depends Test
+
+Task Test -depends Compile, Clean {
+}
+
+Task Compile -depends Clean {
+}
+
+Task Clean {
+}
+
+TaskTearDown {
+  "Running 'TaskTearDown' for task $context.Peek().currentTaskName"
+}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>The script above produces the following output:</maml:para>
+          <maml:para>Executing task, Clean...
+Running 'TaskTearDown' for task Clean
+Executing task, Compile...
+Running 'TaskTearDown' for task Compile
+Executing task, Test...
+Running 'TaskTearDown' for task Test
+
+Build Succeeded</maml:para>
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>TaskSetup</command:name>
+      <maml:description>
+        <maml:para>Adds a scriptblock that will be executed before each task</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This function will accept a scriptblock that will be executed before each
+task in the build script.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>TaskSetup</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>setup</maml:name>
+          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>setup</maml:name>
+        <maml:description>
+          <maml:para>A scriptblock to execute</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        <dev:type>
+          <maml:name>ScriptBlock</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script is shown below:
+
+Task default -depends Test
+
+Task Test -depends Compile, Clean {
+}
+
+Task Compile -depends Clean {
+}
+
+Task Clean {
+}
+
+TaskSetup {
+  "Running 'TaskSetup' for task $context.Peek().currentTaskName"
+}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>The script above produces the following output:</maml:para>
+          <maml:para>Running 'TaskSetup' for task Clean
+Executing task, Clean...
+Running 'TaskSetup' for task Compile
+Executing task, Compile...
+Running 'TaskSetup' for task Test
+Executing task, Test...
+
+Build Succeeded</maml:para>
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Framework</command:name>
+      <maml:description>
+        <maml:para>Sets the version of the .NET framework you want to use during build.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This function will accept a string containing version of the .NET framework to use during build. Possible values: '1.0', '1.1', '2.0', '2.0x86', '2.0x64', '3.0', '3.0x86', '3.0x64', '3.5', '3.5x86', '3.5x64', '4.0', '4.0x86', '4.0x64', '4.5', '4.5x86', '4.5x64', '4.5.1', '4.5.1x86', '4.5.1x64'. Default is '3.5*', where x86 or x64 will be detected based on the bitness of the PowerShell process.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Framework</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>framework</maml:name>
+          <command:parameterValue required="true" variableLength="false">string</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>framework</maml:name>
+        <maml:description>
+          <maml:para>Version of the .NET framework to use during build.</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">string</command:parameterValue>
+        <dev:type>
+          <maml:name>string</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+  <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+  <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <dev:code>
+Framework "4.0"
+
+Task default -depends Compile
+
+Task Compile -depends Clean {
+  msbuild /version
+}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>The script above will output detailed version of msbuid v4</maml:para>
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    </command:examples>
+  <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>FormatTaskName</command:name>
+      <maml:description>
+        <maml:para>This function allows you to change how psake renders the task name during a build.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This function takes either a string which represents a format string (formats using the -f format operator see “help about_operators”) or it can accept a script block that has a single parameter that is the name of the task that will be executed.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>FormatTaskName</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>format</maml:name>
+          <command:parameterValue required="true" variableLength="false">String or ScriptBlock</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>format</maml:name>
+        <maml:description>
+          <maml:para>A format string or a scriptblock to execute</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">String or ScriptBlock</command:parameterValue>
+        <dev:type>
+          <maml:name>String or ScriptBlock</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script that uses a format string is shown below:
+
+Task default -depends TaskA, TaskB, TaskC
+
+FormatTaskName "-------- {0} --------"
+
+Task TaskA {
+  "TaskA is executing"
+}
+
+Task TaskB {
+  "TaskB is executing"
+}
+
+Task TaskC {
+  "TaskC is executing"
+}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>The script above produces the following output:</maml:para>
+          <maml:para>-------- TaskA --------
+TaskA is executing
+-------- TaskB --------
+TaskB is executing
+-------- TaskC --------
+TaskC is executing
+
+Build Succeeded!</maml:para>
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+     <command:example>
+        <maml:title>--------------  EXAMPLE 2 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script that uses a ScriptBlock is shown below:
+
+Task default -depends TaskA, TaskB, TaskC
+
+FormatTaskName {
+   param($taskName)
+   write-host "Executing Task: $taskName" -foregroundcolor blue
+}
+
+Task TaskA {
+  "TaskA is executing"
+}
+
+Task TaskB {
+  "TaskB is executing"
+}
+
+Task TaskC {
+  "TaskC is executing"
+}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>The preceding example uses the scriptblock parameter to the FormatTaskName function to render each task name in the color blue.</maml:para>
+          <maml:para>Note: the $taskName parameter is arbitrary it could be named anything</maml:para>
+          <maml:para />
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
+  <!--Generated by PS Cmdlet Help Editor-->
+    <command:details>
+      <command:name>Get-PSakeScriptTasks</command:name>
+      <maml:description>
+        <maml:para>Returns meta data about all the tasks defined in the provided psake script.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb>Get</command:verb>
+      <command:noun>PSakeScriptTasks</command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>Returns meta data about all the tasks defined in the provided psake script. </maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <maml:name>Get-PSakeScriptTasks</maml:name>
+        <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="0">
+          <maml:name>buildFile</maml:name>
+          <maml:description>
+            <maml:para>The path to the psake build script to read the tasks from.</maml:para>
+          </maml:description>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+        <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named">
+          <maml:name>InformationAction</maml:name>
+          <maml:description>
+            <maml:para />
+          </maml:description>
+          <command:parameterValue required="true" variableLength="false">ActionPreference</command:parameterValue>
+        </command:parameter>
+        <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named">
+          <maml:name>InformationVariable</maml:name>
+          <maml:description>
+            <maml:para />
+          </maml:description>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+      </command:syntaxItem>
+    </command:syntax>
+    <command:parameters>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="0">
+        <maml:name>buildFile</maml:name>
+        <maml:description>
+          <maml:para>The path to the psake build script to read the tasks from.</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri/>
+        </dev:type>
+        <dev:defaultValue>&apos;psakefile.ps1&apos;</dev:defaultValue>
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named">
+        <maml:name>InformationAction</maml:name>
+        <maml:description>
+          <maml:para />
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">ActionPreference</command:parameterValue>
+        <dev:type>
+          <maml:name>ActionPreference</maml:name>
+          <maml:uri/>
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+      <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named">
+        <maml:name>InformationVariable</maml:name>
+        <maml:description>
+          <maml:para />
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri/>
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name></maml:name>
+          <maml:uri></maml:uri>
+          <maml:description/>
+        </dev:type>
+        <maml:description>
+  <maml:para />
+        </maml:description>
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name></maml:name>
+          <maml:uri></maml:uri>
+          <maml:description/>
+        </dev:type>
+        <maml:description>
+  <maml:para />
+        </maml:description>
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors></command:terminatingErrors>
+    <command:nonTerminatingErrors></command:nonTerminatingErrors>
+    <maml:alertSet>
+      <maml:title></maml:title>
+      <maml:alert>
+        <maml:para />
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+    </command:examples>
+    <maml:relatedLinks>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Include</command:name>
+      <maml:description>
+        <maml:para>Include the functions or code of another powershell script file into the current build script's scope</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>A build script may declare an "includes" function which allows you to define a file containing powershell code to be included and added to the scope of the currently running build script. Code from such file will be executed after code from build script.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Include</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>fileNamePathToInclude</maml:name>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>fileNamePathToInclude</maml:name>
+        <maml:description>
+          <maml:para>A string containing the path and name of the powershell file to include</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script is shown below:
+
+Include ".\build_utils.ps1"
+
+Task default -depends Test
+
+Task Test -depends Compile, Clean {
+}
+
+Task Compile -depends Clean {
+}
+
+Task Clean {
+}</dev:code>
+        <dev:remarks>
+          <maml:para>Description</maml:para>
+          <maml:para>-----------</maml:para>
+          <maml:para>The script above includes all the functions and variables defined in the ".\build_utils.ps1" script into the current build script's scope</maml:para>
+          <maml:para>Note: You can have more than 1 "Include" function defined in the build script</maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Properties</command:name>
+      <maml:description>
+        <maml:para>Define a scriptblock that contains assignments to variables that will be available to all tasks in the build script</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>A build script may declare a "Properies" function which allows you to define variables that will be available to all the "Task" functions in the build script. </maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Properties</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>properties</maml:name>
+          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>properties</maml:name>
+        <maml:description>
+          <maml:para>The script block containing all the variable assignment statements</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        <dev:type>
+          <maml:name>ScriptBlock</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script is shown below:
+
+Properties {
+  $build_dir = "c:\build"
+  $connection_string = "datasource=localhost;initial catalog=northwind;integrated security=sspi"
+}
+
+Task default -depends Test
+
+Task Test -depends Compile, Clean {
+}
+
+Task Compile -depends Clean {
+}
+
+Task Clean {
+}</dev:code>
+        <dev:remarks>
+      <maml:para>Description</maml:para>
+      <maml:para>-----------</maml:para>
+      <maml:para>Note: You can have more than 1 "Properties" function defined in the build script</maml:para>
+      <maml:para></maml:para>
+      <maml:para></maml:para>
+      <maml:para></maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Task</command:name>
+      <maml:description>
+        <maml:para>Defines a build task to be executed by psake</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+  <maml:description>
+      <maml:para>This function creates a 'task' object that will be used by the psake engine to execute a build task. Note: There must be at least one task called 'default' in the build script</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Task</command:name>
+        <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>Name</maml:name>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>Action</maml:name>
+          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>PreAction</maml:name>
+          <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>PostAction</maml:name>
+          <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>Precondition</maml:name>
+          <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>Postcondition</maml:name>
+          <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>ContinueOnError</maml:name>
+          <command:parameterValue required="false" variableLength="false">Boolean</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>Depends</maml:name>
+          <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>RequiredVariables</maml:name>
+          <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+        </command:parameter>
+    <command:parameter require="false" variableLength="false" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>Description</maml:name>
+          <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+  <command:parameters>
+    <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>Name</maml:name>
+      <maml:description>
+        <maml:para>The name of the task</maml:para>
+      </maml:description>
+      <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+      <dev:type>
+        <maml:name>String</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>Action</maml:name>
+      <maml:description>
+        <maml:para>A scriptblock containing the statements to execute for the task.</maml:para>
+      </maml:description>
+      <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+      <dev:type>
+        <maml:name>ScriptBlock</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>PreAction</maml:name>
+      <maml:description>
+        <maml:para>A scriptblock to be executed before the 'Action' scriptblock.  Note: This parameter is ignored if the 'Action' scriptblock is not defined.</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+      <dev:type>
+        <maml:name>ScriptBlock</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>PostAction</maml:name>
+      <maml:description>
+        <maml:para>A scriptblock to be executed after the 'Action' scriptblock.  Note: This parameter is ignored if the 'Action' scriptblock is not defined.</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+      <dev:type>
+        <maml:name>ScriptBlock</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>Precondition</maml:name>
+      <maml:description>
+        <maml:para>A scriptblock that is executed to determine if the task is executed or skipped. This scriptblock should return $true or $false</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+      <dev:type>
+        <maml:name>ScriptBlock</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>Postcondition</maml:name>
+      <maml:description>
+        <maml:para>A scriptblock that is executed to determine if the task completed its job correctly.  An exception is thrown if the scriptblock returns $false.</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">ScriptBlock</command:parameterValue>
+      <dev:type>
+        <maml:name>ScriptBlock</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>ContinueOnError</maml:name>
+      <maml:description>
+        <maml:para>If this switch parameter is set then the task will not cause the build to fail when an exception is thrown by the task</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
+      <dev:type>
+        <maml:name>SwitchParameter</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>Depends</maml:name>
+      <maml:description>
+        <maml:para>An array of task names that this task depends on.  These tasks will be executed before the current task is executed.</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+      <dev:type>
+        <maml:name>String[]</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>RequiredVariables</maml:name>
+      <maml:description>
+        <maml:para>An array of names of variables that must be set to run this task.</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">String[]</command:parameterValue>
+      <dev:type>
+        <maml:name>String[]</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+    <command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+      <maml:name>Description</maml:name>
+      <maml:description>
+        <maml:para>A description of the task.</maml:para>
+      </maml:description>
+      <command:parameterValue required="false" variableLength="false">String</command:parameterValue>
+      <dev:type>
+        <maml:name>String</maml:name>
+        <maml:uri />
+      </dev:type>
+      <dev:defaultValue></dev:defaultValue>
+    </command:parameter>
+  </command:parameters>
+   <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>A sample build script is shown below:
+
+Task default -Depends Test
+
+Task Test -Depends Compile, Clean {
+  "This is a test"
+}
+
+Task Compile -Depends Clean {
+  "Compile"
+}
+
+Task Clean {
+  "Clean"
+}
+
+The 'default' task is required and should not contain an 'Action' parameter.
+It uses the 'Depends' parameter to specify that 'Test' is a dependency
+
+The 'Test' task uses the 'Depends' parameter to specify that 'Compile' and 'Clean' are dependencies
+The 'Compile' task depends on the 'Clean' task.
+
+Note:
+The 'Action' parameter is defaulted to the script block following the 'Clean' task.
+
+An equivalent 'Test' task is shown below:
+
+Task Test -Depends Compile, Clean -Action {
+  $testMessage
+}
+
+The output for the above sample build script is shown below:
+Executing task, Clean...
+Clean
+Executing task, Compile...
+Compile
+Executing task, Test...
+This is a test
+
+Build Succeeded!
+
+----------------------------------------------------------------------
+Build Time Report
+----------------------------------------------------------------------
+Name    Duration
+----    --------
+Clean   00:00:00.0065614
+Compile 00:00:00.0133268
+Test    00:00:00.0225964
+Total:  00:00:00.0782496</dev:code>
+        <dev:remarks>
+          <maml:para></maml:para>
+          <maml:para></maml:para>
+          <maml:para></maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Properties</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Assert</command:name>
+      <maml:description>
+        <maml:para>Helper function for "Design by Contract" assertion checking.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This is a helper function that makes the code less noisy by eliminating many of the "if" statements that are normally required to verify assumptions in the code.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Assert</command:name>
+        <command:parameter require="true" variableLength="true" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>conditionToCheck</maml:name>
+          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="true" variableLength="true" globbing="false" pipelineInput="false" postion="1">
+          <maml:name>failureMessage</maml:name>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>conditionToCheck</maml:name>
+        <maml:description>
+          <maml:para>The boolean condition to evaluate</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="true">Boolean</command:parameterValue>
+        <dev:type>
+          <maml:name>Boolean</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false (ByValue)" position="1">
+        <maml:name>failureMessage</maml:name>
+        <maml:description>
+          <maml:para>The error message used for the exception if the conditionToCheck parameter is false</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="true">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Assert $false "This always throws an exception"</dev:code>
+        <dev:remarks>
+          <maml:para></maml:para>
+          <maml:para></maml:para>
+          <maml:para></maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+    <command:example>
+        <maml:title>--------------  EXAMPLE 2 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Assert ( ($i % 2) -eq 0 ) "$i is not an even number"</dev:code>
+        <dev:remarks>
+    <maml:para>Description</maml:para>
+      <maml:para>-----------</maml:para>
+          <maml:para>This exmaple may throw an exception if $i is not an even number</maml:para>
+          <maml:para></maml:para>
+          <maml:para>Note:</maml:para>
+      <maml:para>It might be necessary to wrap the condition with paranthesis to force PS to evaluate the condition
+so that a boolean value is calculated and passed into the 'conditionToCheck' parameter.
+
+Example:
+    Assert 1 -eq 2 "1 doesn't equal 2"
+
+PS will pass 1 into the condtionToCheck variable and PS will look for a parameter called "eq" and
+throw an exception with the following message "A parameter cannot be found that matches parameter name 'eq'"
+
+The solution is to wrap the condition in () so that PS will evaluate it first.
+
+    Assert (1 -eq 2) "1 doesn't equal 2"
+      </maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+
+    </command:examples>
+    <maml:relatedLinks>
+      <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Exec</command:name>
+      <maml:description>
+        <maml:para>Helper function for executing command-line programs.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This is a helper function that runs a scriptblock and checks the PS variable $lastexitcode to see if an error occcured. If an error is detected then an exception is thrown. This function allows you to run command-line programs without having to explicitly check fthe $lastexitcode variable.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Exec</command:name>
+        <command:parameter require="true" variableLength="true" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>cmd</maml:name>
+          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
+        </command:parameter>
+        <command:parameter require="true" variableLength="true" globbing="false" pipelineInput="false" postion="1">
+          <maml:name>errorMessage</maml:name>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>cmd</maml:name>
+        <maml:description>
+          <maml:para>The scriptblock to execute.  This scriptblock will typically contain the command-line invocation.</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="true">ScriptBlock</command:parameterValue>
+        <dev:type>
+          <maml:name>Boolean</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false (ByValue)" position="1">
+        <maml:name>failureMessage</maml:name>
+        <maml:description>
+          <maml:para>The error message used for the exception that is thrown.</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="true">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>exec { svn info $repository_trunk } "Error executing SVN. Please verify SVN command-line client is installed"</dev:code>
+        <dev:remarks>
+          <maml:para>This example calls the svn command-line client.</maml:para>
+          <maml:para></maml:para>
+          <maml:para></maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+
+    </command:examples>
+    <maml:relatedLinks>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+  </command:command>
+
+  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
+    <command:details>
+      <command:name>Invoke-Task</command:name>
+      <maml:description>
+        <maml:para>Executes another task in the current build script.</maml:para>
+      </maml:description>
+      <maml:copyright>
+        <maml:para />
+      </maml:copyright>
+      <command:verb></command:verb>
+      <command:noun></command:noun>
+      <dev:version />
+    </command:details>
+    <maml:description>
+      <maml:para>This is a function that will allow you to invoke a Task from within another Task in the current build script.</maml:para>
+    </maml:description>
+    <command:syntax>
+      <command:syntaxItem>
+        <command:name>Invoke-Task</command:name>
+        <command:parameter require="true" variableLength="true" globbing="false" pipelineInput="false" postion="0">
+          <maml:name>taskName</maml:name>
+          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
+        </command:parameter>
+       </command:syntaxItem>
+    </command:syntax>
+   <command:parameters>
+      <command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false (ByValue)" position="0">
+        <maml:name>taskName</maml:name>
+        <maml:description>
+          <maml:para>The name of the task to execute.</maml:para>
+        </maml:description>
+        <command:parameterValue required="true" variableLength="true">String</command:parameterValue>
+        <dev:type>
+          <maml:name>String</maml:name>
+          <maml:uri />
+        </dev:type>
+        <dev:defaultValue></dev:defaultValue>
+      </command:parameter>
+    </command:parameters>
+    <command:inputTypes>
+      <command:inputType>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para />
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:inputType>
+    </command:inputTypes>
+    <command:returnValues>
+      <command:returnValue>
+        <dev:type>
+          <maml:name>None</maml:name>
+          <maml:uri />
+          <maml:description>
+            <maml:para></maml:para>
+          </maml:description>
+        </dev:type>
+        <maml:description />
+      </command:returnValue>
+    </command:returnValues>
+    <command:terminatingErrors />
+    <command:nonTerminatingErrors />
+    <maml:alertSet>
+      <maml:title></maml:title>
+    <maml:alert>
+    <maml:para></maml:para>
+      </maml:alert>
+    </maml:alertSet>
+    <command:examples>
+      <command:example>
+        <maml:title>--------------  EXAMPLE 1 --------------</maml:title>
+        <maml:introduction>
+          <maml:para>C:\PS&gt;</maml:para>
+        </maml:introduction>
+        <dev:code>Invoke-Task "Compile"</dev:code>
+        <dev:remarks>
+          <maml:para>This example calls the "Compile" task.</maml:para>
+          <maml:para></maml:para>
+          <maml:para></maml:para>
+        </dev:remarks>
+        <command:commandLines>
+          <command:commandLine>
+            <command:commandText />
+          </command:commandLine>
+        </command:commandLines>
+      </command:example>
+
+    </command:examples>
+    <maml:relatedLinks>
+    <maml:navigationLink>
+    <maml:linkText>Assert</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Exec</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>FormatTaskName</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>Include</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Invoke-psake</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Properties</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+        <maml:linkText>Task</maml:linkText>
+       <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+      <maml:linkText>TaskSetup</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>TaskTearDown</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    <maml:navigationLink>
+    <maml:linkText>Framework</maml:linkText>
+    <maml:uri />
+      </maml:navigationLink>
+    </maml:relatedLinks>
+  </command:command>
+  </helpItems>
diff --git a/.build/psake/private/CleanupEnvironment.ps1 b/.build/psake/private/CleanupEnvironment.ps1
new file mode 100644
index 0000000..7d970f6
--- /dev/null
+++ b/.build/psake/private/CleanupEnvironment.ps1
@@ -0,0 +1,12 @@
+function CleanupEnvironment {
+    if ($psake.context.Count -gt 0) {
+        $currentContext = $psake.context.Peek()
+        [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssigments', '')]
+        $env:PATH = $currentContext.originalEnvPath
+        Set-Location $currentContext.originalDirectory
+        $global:ErrorActionPreference = $currentContext.originalErrorActionPreference
+        $psake.LoadedTaskModules = @{}
+        $psake.ReferenceTasks = @{}
+        [void] $psake.context.Pop()
+    }
+}
diff --git a/.build/psake/private/ConfigureBuildEnvironment.ps1 b/.build/psake/private/ConfigureBuildEnvironment.ps1
new file mode 100644
index 0000000..de64819
--- /dev/null
+++ b/.build/psake/private/ConfigureBuildEnvironment.ps1
@@ -0,0 +1,202 @@
+
+function ConfigureBuildEnvironment {
+    if (!(Test-Path Variable:\IsWindows) -or $IsWindows) {
+        $framework = $psake.context.peek().config.framework
+        if ($framework -cmatch '^((?:\d+\.\d+)(?:\.\d+){0,1})(x86|x64){0,1}$') {
+            $versionPart = $matches[1]
+            $bitnessPart = $matches[2]
+        }
+        else {
+            throw ($msgs.error_invalid_framework -f $framework)
+        }
+        $versions = $null
+        $buildToolsVersions = $null
+        switch ($versionPart) {
+            '1.0' {
+                $versions = @('v1.0.3705')
+            }
+            '1.1' {
+                $versions = @('v1.1.4322')
+            }
+            '1.1.0' {
+                $versions = @()
+            }
+            '2.0' {
+                $versions = @('v2.0.50727')
+            }
+            '2.0.0' {
+                $versions = @()
+            }
+            '3.0' {
+                $versions = @('v2.0.50727')
+            }
+            '3.5' {
+                $versions = @('v3.5', 'v2.0.50727')
+            }
+            '4.0' {
+                $versions = @('v4.0.30319')
+            }
+            {($_ -eq '4.5') -or ($_ -eq '4.5.1') -or ($_ -eq '4.5.2')} {
+                $versions = @('v4.0.30319')
+                $buildToolsVersions = @('16.0', '15.0', '14.0', '12.0')
+            }
+            {($_ -eq '4.6') -or ($_ -eq '4.6.1') -or ($_ -eq '4.6.2')} {
+                $versions = @('v4.0.30319')
+                $buildToolsVersions = @('16.0', '15.0', '14.0')
+            }
+            {($_ -eq '4.7') -or ($_ -eq '4.7.1') -or ($_ -eq '4.7.2')} {
+                $versions = @('v4.0.30319')
+                $buildToolsVersions = @('16.0', '15.0')
+            }
+            '4.8' {
+                $versions = @('v4.0.30319')
+                $buildToolsVersions = @('16.0', '15.0')
+            }
+
+            default {
+                throw ($msgs.error_unknown_framework -f $versionPart, $framework)
+            }
+        }
+
+        $bitness = 'Framework'
+        if ($versionPart -ne '1.0' -and $versionPart -ne '1.1') {
+            switch ($bitnessPart) {
+                'x86' {
+                    $bitness = 'Framework'
+                    $buildToolsKey = 'MSBuildToolsPath32'
+                }
+                'x64' {
+                    $bitness = 'Framework64'
+                    $buildToolsKey = 'MSBuildToolsPath'
+                }
+                { [string]::IsNullOrEmpty($_) } {
+                    $ptrSize = [System.IntPtr]::Size
+                    switch ($ptrSize) {
+                        4 {
+                            $bitness = 'Framework'
+                            $buildToolsKey = 'MSBuildToolsPath32'
+                        }
+                        8 {
+                            $bitness = 'Framework64'
+                            $buildToolsKey = 'MSBuildToolsPath'
+                        }
+                        default {
+                            throw ($msgs.error_unknown_pointersize -f $ptrSize)
+                        }
+                    }
+                }
+                default {
+                    throw ($msgs.error_unknown_bitnesspart -f $bitnessPart, $framework)
+                }
+            }
+        }
+
+        $frameworkDirs = @()
+        if ($null -ne $buildToolsVersions) {
+            foreach($ver in $buildToolsVersions) {
+                if ($ver -eq "15.0") {
+                    if ($null -eq (Get-Module -Name VSSetup)) {
+                        if ($null -eq (Get-Module -Name VSSetup -ListAvailable)) {
+                            WriteColoredOutput ($msgs.warning_missing_vsssetup_module -f $ver) -foregroundcolor Yellow
+                            continue
+                        }
+
+                        Import-Module VSSetup
+                    }
+
+                    # borrowed from nightroman https://github.com/nightroman/Invoke-Build
+                    if ($vsInstances = Get-VSSetupInstance) {
+                        $vs = @($vsInstances | Select-VSSetupInstance -Version '[15.0, 16.0)' -Require Microsoft.Component.MSBuild)
+                        if ($vs) {
+                            if ($buildToolsKey -eq 'MSBuildToolsPath32') {
+                                $frameworkDirs += Join-Path ($vs[0].InstallationPath) MSBuild\15.0\Bin
+                            }
+                            else {
+                                $frameworkDirs += Join-Path ($vs[0].InstallationPath) MSBuild\15.0\Bin\amd64
+                            }
+                        }
+
+                        $vs = @($vsInstances | Select-VSSetupInstance -Version '[15.0, 16.0)' -Product Microsoft.VisualStudio.Product.BuildTools)
+                        if ($vs) {
+                            if ($buildToolsKey -eq 'MSBuildToolsPath32') {
+                                $frameworkDirs += Join-Path ($vs[0].InstallationPath) MSBuild\15.0\Bin
+                            }
+                            else {
+                                $frameworkDirs += Join-Path ($vs[0].InstallationPath) MSBuild\15.0\Bin\amd64
+                            }
+                        }
+                    }
+                    else {
+                        if (!($root = ${env:ProgramFiles(x86)})) {$root = $env:ProgramFiles}
+                        if (Test-Path -LiteralPath "$root\Microsoft Visual Studio\2017") {
+                            if ($buildToolsKey -eq 'MSBuildToolsPath32') {
+                                $rp = @(Resolve-Path "$root\Microsoft Visual Studio\2017\*\MSBuild\15.0\Bin" -ErrorAction SilentlyContinue)
+                            }
+                            else {
+                                $rp = @(Resolve-Path "$root\Microsoft Visual Studio\2017\*\MSBuild\15.0\Bin\amd64" -ErrorAction SilentlyContinue)
+                            }
+
+                            if ($rp) {
+                                $frameworkDirs += $rp[-1].ProviderPath
+                            }
+                        }
+                    }
+                }
+                elseif ($ver -eq "16.0") {
+                    if ($null -eq (Get-Module -Name VSSetup)) {
+                        if ($null -eq (Get-Module -Name VSSetup -ListAvailable)) {
+                            WriteColoredOutput ($msgs.warning_missing_vsssetup_module -f $ver) -foregroundcolor Yellow
+                            continue
+                        }
+
+                        Import-Module VSSetup
+                    }
+
+                    # borrowed from nightroman https://github.com/nightroman/Invoke-Build
+                    if ($vsInstances = Get-VSSetupInstance) {
+                        $vs = @($vsInstances | Select-VSSetupInstance -Version '[16.0,)' -Require Microsoft.Component.MSBuild)
+                        if ($vs) {
+                            $frameworkDirs += Join-Path ($vs[0].InstallationPath) MSBuild\Current\Bin
+                        }
+
+                        $vs = @($vsInstances | Select-VSSetupInstance -Version '[16.0,)' -Product Microsoft.VisualStudio.Product.BuildTools)
+                        if ($vs) {
+                            $frameworkDirs += Join-Path ($vs[0].InstallationPath) MSBuild\Current\Bin
+                        }
+                    }
+                    else {
+                        if (!($root = ${env:ProgramFiles(x86)})) {$root = $env:ProgramFiles}
+                        if (Test-Path -LiteralPath "$root\Microsoft Visual Studio\2019") {
+                            $rp = @(Resolve-Path "$root\Microsoft Visual Studio\2019\*\MSBuild\Current\Bin" -ErrorAction SilentlyContinue)
+                            if ($rp) {
+                                $frameworkDirs += $rp[-1].ProviderPath
+                            }
+                        }
+                    }
+                }
+                elseif (Test-Path "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\$ver") {
+                    $frameworkDirs += (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\$ver" -Name $buildToolsKey).$buildToolsKey
+                }
+            }
+        }
+
+        $frameworkDirs = $frameworkDirs + @($versions | ForEach-Object { "$env:windir\Microsoft.NET\$bitness\$_\" })
+        for ($i = 0; $i -lt $frameworkDirs.Count; $i++) {
+            $dir = $frameworkDirs[$i]
+            if ($dir -Match "\$\(Registry:HKEY_LOCAL_MACHINE(.*?)@(.*)\)") {
+                $key = "HKLM:" + $matches[1]
+                $name = $matches[2]
+                $dir = (Get-ItemProperty -Path $key -Name $name).$name
+                $frameworkDirs[$i] = $dir
+            }
+        }
+
+        $frameworkDirs | ForEach-Object { Assert (test-path $_ -pathType Container) ($msgs.error_no_framework_install_dir_found -f $_)}
+
+        $env:PATH = ($frameworkDirs -join ";") + ";$env:PATH"
+    }
+
+    # if any error occurs in a PS function then "stop" processing immediately
+    # this does not effect any external programs that return a non-zero exit code
+    $global:ErrorActionPreference = "Stop"
+}
diff --git a/.build/psake/private/CreateConfigurationForNewContext.ps1 b/.build/psake/private/CreateConfigurationForNewContext.ps1
new file mode 100644
index 0000000..cbe91f4
--- /dev/null
+++ b/.build/psake/private/CreateConfigurationForNewContext.ps1
@@ -0,0 +1,28 @@
+function CreateConfigurationForNewContext {
+    param(
+        [string] $buildFile,
+        [string] $framework
+    )
+
+    $previousConfig = GetCurrentConfigurationOrDefault
+
+    $config = new-object psobject -property @{
+        buildFileName = $previousConfig.buildFileName;
+        framework = $previousConfig.framework;
+        taskNameFormat = $previousConfig.taskNameFormat;
+        verboseError = $previousConfig.verboseError;
+        coloredOutput = $previousConfig.coloredOutput;
+        modules = $previousConfig.modules;
+        moduleScope =  $previousConfig.moduleScope;
+    }
+
+    if ($framework) {
+        $config.framework = $framework;
+    }
+
+    if ($buildFile) {
+        $config.buildFileName = $buildFile;
+    }
+
+    return $config
+}
diff --git a/.build/psake/private/ExecuteInBuildFileScope.ps1 b/.build/psake/private/ExecuteInBuildFileScope.ps1
new file mode 100644
index 0000000..8dd5fbb
--- /dev/null
+++ b/.build/psake/private/ExecuteInBuildFileScope.ps1
@@ -0,0 +1,58 @@
+function ExecuteInBuildFileScope {
+    param([string]$buildFile, $module, [scriptblock]$sb)
+
+    # Execute the build file to set up the tasks and defaults
+    Assert (test-path $buildFile -pathType Leaf) ($msgs.error_build_file_not_found -f $buildFile)
+
+    $psake.build_script_file = get-item $buildFile
+    $psake.build_script_dir = $psake.build_script_file.DirectoryName
+    $psake.build_success = $false
+
+    # Create a new psake context
+    $psake.context.push(
+        @{
+            "buildSetupScriptBlock"         = {}
+            "buildTearDownScriptBlock"      = {}
+            "taskSetupScriptBlock"          = {}
+            "taskTearDownScriptBlock"       = {}
+            "executedTasks"                 = new-object System.Collections.Stack
+            "callStack"                     = new-object System.Collections.Stack
+            "originalEnvPath"               = $env:PATH
+            "originalDirectory"             = get-location
+            "originalErrorActionPreference" = $global:ErrorActionPreference
+            "tasks"                         = @{}
+            "aliases"                       = @{}
+            "properties"                    = new-object System.Collections.Stack
+            "includes"                      = new-object System.Collections.Queue
+            "config"                        = CreateConfigurationForNewContext $buildFile $framework
+        }
+    )
+
+    # Load in the psake configuration (or default)
+    LoadConfiguration $psake.build_script_dir
+
+    set-location $psake.build_script_dir
+
+    # Import any modules declared in the build script
+    LoadModules
+
+    $frameworkOldValue = $framework
+
+    . $psake.build_script_file.FullName
+
+    $currentContext = $psake.context.Peek()
+
+    if ($framework -ne $frameworkOldValue) {
+        writecoloredoutput $msgs.warning_deprecated_framework_variable -foregroundcolor Yellow
+        $currentContext.config.framework = $framework
+    }
+
+    ConfigureBuildEnvironment
+
+    while ($currentContext.includes.Count -gt 0) {
+        $includeFilename = $currentContext.includes.Dequeue()
+        . $includeFilename
+    }
+
+    & $sb $currentContext $module
+}
diff --git a/.build/psake/private/FormatErrorMessage.ps1 b/.build/psake/private/FormatErrorMessage.ps1
new file mode 100644
index 0000000..657aa72
--- /dev/null
+++ b/.build/psake/private/FormatErrorMessage.ps1
@@ -0,0 +1,26 @@
+function FormatErrorMessage
+{
+    [CmdletBinding()]
+    param(
+        [Parameter(ValueFromPipeline=$true)]
+        $ErrorRecord = $Error[0]
+    )
+
+    $currentConfig = GetCurrentConfigurationOrDefault
+    if ($currentConfig.verboseError) {
+        $error_message = "{0}: An Error Occurred. See Error Details Below: $($script:nl)" -f (Get-Date)
+        $error_message += ("-" * 70) + $script:nl
+        $error_message += "Error: {0}$($script:nl)" -f (ResolveError $ErrorRecord -Short)
+        $error_message += ("-" * 70) + $script:nl
+        $error_message += ResolveError $ErrorRecord
+        $error_message += ("-" * 70) + $script:nl
+        $error_message += "Script Variables" + $script:nl
+        $error_message += ("-" * 70) + $script:nl
+        $error_message += get-variable -scope script | format-table | out-string
+    } else {
+        # ($_ | Out-String) gets error messages with source information included.
+        $error_message = "Error: {0}: $($script:nl){1}" -f (Get-Date), (ResolveError $ErrorRecord -Short)
+}
+
+    $error_message
+}
diff --git a/.build/psake/private/Get-DefaultBuildFile.ps1 b/.build/psake/private/Get-DefaultBuildFile.ps1
new file mode 100644
index 0000000..5413208
--- /dev/null
+++ b/.build/psake/private/Get-DefaultBuildFile.ps1
@@ -0,0 +1,17 @@
+# Attempt to find the default build file given the config_default of
+# buildFileName and legacyBuildFileName.  If neither exist optionally
+# return the buildFileName or $null
+function Get-DefaultBuildFile {
+    param(
+        [boolean] $UseDefaultIfNoneExist = $true
+    )
+
+    if (test-path $psake.config_default.buildFileName -pathType Leaf) {
+        Write-Output $psake.config_default.buildFileName
+    } elseif (test-path $psake.config_default.legacyBuildFileName -pathType Leaf) {
+        Write-Warning "The default configuration file of default.ps1 is deprecated.  Please use psakefile.ps1"
+        Write-Output $psake.config_default.legacyBuildFileName
+    } elseif ($UseDefaultIfNoneExist) {
+        Write-Output $psake.config_default.buildFileName
+    }
+}
diff --git a/.build/psake/private/GetCurrentConfigurationOrDefault.ps1 b/.build/psake/private/GetCurrentConfigurationOrDefault.ps1
new file mode 100644
index 0000000..ae0fa4f
--- /dev/null
+++ b/.build/psake/private/GetCurrentConfigurationOrDefault.ps1
@@ -0,0 +1,7 @@
+function GetCurrentConfigurationOrDefault() {
+    if ($psake.context.count -gt 0) {
+        return $psake.context.peek().config
+    } else {
+        return $psake.config_default
+    }
+}
diff --git a/.build/psake/private/GetTasksFromContext.ps1 b/.build/psake/private/GetTasksFromContext.ps1
new file mode 100644
index 0000000..5764962
--- /dev/null
+++ b/.build/psake/private/GetTasksFromContext.ps1
@@ -0,0 +1,15 @@
+function GetTasksFromContext($currentContext) {
+
+    $docs = $currentContext.tasks.Keys | foreach-object {
+
+        $task = $currentContext.tasks.$_
+        new-object PSObject -property @{
+            Name = $task.Name;
+            Alias = $task.Alias;
+            Description = $task.Description;
+            DependsOn = $task.DependsOn;
+        }
+    }
+
+    return $docs
+}
diff --git a/.build/psake/private/LoadConfiguration.ps1 b/.build/psake/private/LoadConfiguration.ps1
new file mode 100644
index 0000000..7cdcd28
--- /dev/null
+++ b/.build/psake/private/LoadConfiguration.ps1
@@ -0,0 +1,31 @@
+function LoadConfiguration {
+    <#
+    .SYNOPSIS
+    Load psake-config.ps1 file
+    .DESCRIPTION
+    Load psake-config.ps1 if present in the directory of the current build script.
+    If that file doesn't exist, load the default psake-config.ps1 file from the module directory.
+    #>
+    param(
+        [string]$configdir = (Split-Path -Path $PSScriptRoot -Parent)
+    )
+
+    $configFilePath  = Join-Path -Path $configdir -ChildPath $script:psakeConfigFile
+    $defaultConfigFilePath = Join-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -ChildPath $script:psakeConfigFile
+
+    if (Test-Path -LiteralPath $configFilePath -PathType Leaf) {
+        $configFileToLoad = $configFilePath
+    } elseIf (Test-Path -LiteralPath $defaultConfigFilePath -PathType Leaf) {
+        $configFileToLoad = $defaultConfigFilePath
+    } else {
+        throw 'Cannot find psake-config.ps1'
+    }
+
+    try {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssigments', '')]
+        $config = GetCurrentConfigurationOrDefault
+        . $configFileToLoad
+    } catch {
+        throw 'Error Loading Configuration from {0}: {1}' -f $configFileToLoad, $_
+    }
+}
diff --git a/.build/psake/private/LoadModules.ps1 b/.build/psake/private/LoadModules.ps1
new file mode 100644
index 0000000..7182b1f
--- /dev/null
+++ b/.build/psake/private/LoadModules.ps1
@@ -0,0 +1,21 @@
+function LoadModules {
+    $currentConfig = $psake.context.peek().config
+    if ($currentConfig.modules) {
+
+        $scope = $currentConfig.moduleScope
+
+        $global = [string]::Equals($scope, "global", [StringComparison]::CurrentCultureIgnoreCase)
+
+        $currentConfig.modules | ForEach-Object {
+            resolve-path $_ | ForEach-Object {
+                "Loading module: $_"
+                $module = Import-Module $_ -passthru -DisableNameChecking -global:$global
+                if (!$module) {
+                    throw ($msgs.error_loading_module -f $_.Name)
+                }
+            }
+        }
+
+        ""
+    }
+}
diff --git a/.build/psake/private/ResolveError.ps1 b/.build/psake/private/ResolveError.ps1
new file mode 100644
index 0000000..3f697ba
--- /dev/null
+++ b/.build/psake/private/ResolveError.ps1
@@ -0,0 +1,62 @@
+# borrowed from Jeffrey Snover http://blogs.msdn.com/powershell/archive/2006/12/07/resolve-error.aspx
+# modified to better handle SQL errors
+function ResolveError
+{
+    [CmdletBinding()]
+    param(
+        [Parameter(ValueFromPipeline=$true)]
+        $ErrorRecord=$Error[0],
+        [Switch]
+        $Short
+    )
+
+    process {
+        if ($_ -eq $null) { $_ = $ErrorRecord }
+        $ex = $_.Exception
+
+        if (-not $Short) {
+            $error_message = "$($script:nl)ErrorRecord:{0}ErrorRecord.InvocationInfo:{1}Exception:$($script:nl){2}"
+            $formatted_errorRecord = $_ | format-list * -force | out-string
+            $formatted_invocationInfo = $_.InvocationInfo | format-list * -force | out-string
+            $formatted_exception = ''
+
+            $i = 0
+            while ($null -ne $ex) {
+                $i++
+                $formatted_exception += ("$i" * 70) + $script:nl +
+                    ($ex | format-list * -force | out-string) + $script:nl
+                $ex = $ex | SelectObjectWithDefault -Name 'InnerException' -Value $null
+            }
+
+            return $error_message -f $formatted_errorRecord, $formatted_invocationInfo, $formatted_exception
+        }
+
+        $lastException = @()
+        while ($null -ne $ex) {
+            $lastMessage = $ex | SelectObjectWithDefault -Name 'Message' -Value ''
+            $lastException += ($lastMessage -replace $script:nl, '')
+            if ($ex -is [Data.SqlClient.SqlException]) {
+                $lastException += "(Line [$($ex.LineNumber)] " +
+                    "Procedure [$($ex.Procedure)] Class [$($ex.Class)] " +
+                    " Number [$($ex.Number)] State [$($ex.State)] )"
+            }
+            $ex = $ex | SelectObjectWithDefault -Name 'InnerException' -Value $null
+        }
+        $shortException = $lastException -join ' --> '
+
+        $header = $null
+        $header = (($_.InvocationInfo |
+            SelectObjectWithDefault -Name 'PositionMessage' -Value '') -replace $script:nl, ' '),
+            ($_ | SelectObjectWithDefault -Name 'Message' -Value ''),
+            ($_ | SelectObjectWithDefault -Name 'Exception' -Value '') |
+                Where-Object { -not [String]::IsNullOrEmpty($_) } |
+                Select-Object -First 1
+
+        $delimiter = ''
+        if ((-not [String]::IsNullOrEmpty($header)) -and
+            (-not [String]::IsNullOrEmpty($shortException)))
+            { $delimiter = ' [<<==>>] ' }
+
+        return "$($header)$($delimiter)Exception: $($shortException)"
+    }
+}
diff --git a/.build/psake/private/SelectObjectWithDefault.ps1 b/.build/psake/private/SelectObjectWithDefault.ps1
new file mode 100644
index 0000000..f60af9d
--- /dev/null
+++ b/.build/psake/private/SelectObjectWithDefault.ps1
@@ -0,0 +1,23 @@
+function SelectObjectWithDefault
+{
+    [CmdletBinding()]
+    param(
+        [Parameter(ValueFromPipeline=$true)]
+        [PSObject]
+        $InputObject,
+        [string]
+        $Name,
+        $Value
+    )
+
+    process {
+        if ($_ -eq $null) { $Value }
+        elseif ($_ | Get-Member -Name $Name) {
+          $_.$Name
+        }
+        elseif (($_ -is [Hashtable]) -and ($_.Keys -contains $Name)) {
+          $_.$Name
+        }
+        else { $Value }
+    }
+}
diff --git a/.build/psake/private/Test-ModuleVersion.ps1 b/.build/psake/private/Test-ModuleVersion.ps1
new file mode 100644
index 0000000..c1c9fb5
--- /dev/null
+++ b/.build/psake/private/Test-ModuleVersion.ps1
@@ -0,0 +1,107 @@
+<#
+.SYNOPSIS
+    Validate that the version of a module passed in via the $currentVersion
+    parameter is valid based on the criteria specified by the following
+    parameters.
+.DESCRIPTION
+    This function is used to determine whether or not a given module is within
+    the version bounds specified by the parameters passed in. Psake will use
+    this information to determine if the module it has found will contain the
+    proper version of the shared task it has been asked to import.
+
+    This function should allow bounds that are only on the lower limit, only on
+    the upper, within a range, or if no bounds are supplied, the current module
+    will be accepted without question.
+.PARAMETER currentVersion
+    The version of the module in the current session to be subjected to comparison
+.PARAMETER minimumVersion
+    The lower bound of the version that will be accepted. This comparison should
+    be inclusive, meaning an input version greater than or equal to this version
+    should be accepted.
+.PARAMETER maximumVersion
+    The upper bound of the version that will be accepted. This comparison should
+    be inclusive, meaning an input version less than or equal to this version
+    should be accepted.
+.PARAMETER lessThanVersion
+    The upper bound of the version that will be accepted. This comparison should
+    be exlusive. Meaning an input version that is less than only, not equal to
+    this version, will be accepted.
+.INPUTS
+    A $currentVersion of type [System.Version] or a convertable string.
+    A set of version criteria, each of type [System.Version] or a convertable string.
+.OUTPUTS
+    boolean - Pass/Fail
+#>
+function Test-ModuleVersion {
+    [CmdletBinding()]
+    param (
+        [string]$currentVersion,
+        [string]$minimumVersion,
+        [string]$maximumVersion,
+        [string]$lessThanVersion
+    )
+
+    begin {
+    }
+
+    process {
+        $result = $true
+
+        # If no version is specified simply return true and allow the module to pass.
+        if("$minimumVersion$maximumVersion$lessthanVersion" -eq ''){
+            return $true
+        }
+
+        # Single integer values cannot be converted to type system.version.
+        # We convert to a string, and if there is a single character we know that
+        # we need to add a '.0' to the integer to make it convertable to a version.
+        if(![string]::IsNullOrEmpty($currentVersion)) {
+            if($currentVersion.ToString().Length -eq 1) {
+                [version]$currentVersion = "$currentVersion.0"
+            } else {
+                [version]$currentVersion = $currentVersion
+            }
+        }
+
+        if(![string]::IsNullOrEmpty($minimumVersion)) {
+            if($minimumVersion.ToString().Length -eq 1){
+                [version]$minimumVersion = "$minimumVersion.0"
+            } else {
+                [version]$minimumVersion = $minimumVersion
+            }
+
+            if($currentVersion.CompareTo($minimumVersion) -lt 0){
+                $result = $false
+            }
+        }
+
+        if(![string]::IsNullOrEmpty($maximumVersion)) {
+            if($maximumVersion.ToString().Length -eq 1) {
+                [version]$maximumVersion = "$maximumVersion.0"
+            } else {
+                [version]$maximumVersion = $maximumVersion
+            }
+
+            if ($currentVersion.CompareTo($maximumVersion) -gt 0) {
+                $result = $false
+            }
+        }
+
+        if(![string]::IsNullOrEmpty($lessThanVersion)) {
+            if($lessThanVersion.ToString().Length -eq 1) {
+                [version]$lessThanVersion = "$lessThanVersion.0"
+            } else {
+                [version]$lessThanVersion = $lessThanVersion
+            }
+
+            if($currentVersion.CompareTo($lessThanVersion) -ge 0) {
+                $result = $false
+            }
+        }
+
+        Write-Output $result
+    }
+
+    end {
+    }
+}
diff --git a/.build/psake/private/WriteColoredOutput.ps1 b/.build/psake/private/WriteColoredOutput.ps1
new file mode 100644
index 0000000..5c33ec6
--- /dev/null
+++ b/.build/psake/private/WriteColoredOutput.ps1
@@ -0,0 +1,20 @@
+function WriteColoredOutput {
+    param(
+        [string] $message,
+        [System.ConsoleColor] $foregroundcolor
+    )
+
+    $currentConfig = GetCurrentConfigurationOrDefault
+    if ($currentConfig.coloredOutput -eq $true) {
+        if (($null -ne $Host.UI) -and ($null -ne $Host.UI.RawUI) -and ($null -ne $Host.UI.RawUI.ForegroundColor)) {
+            $previousColor = $Host.UI.RawUI.ForegroundColor
+            $Host.UI.RawUI.ForegroundColor = $foregroundcolor
+        }
+    }
+
+    $message
+
+    if ($null -ne $previousColor) {
+        $Host.UI.RawUI.ForegroundColor = $previousColor
+    }
+}
diff --git a/.build/psake/private/WriteDocumentation.ps1 b/.build/psake/private/WriteDocumentation.ps1
new file mode 100644
index 0000000..a131e54
--- /dev/null
+++ b/.build/psake/private/WriteDocumentation.ps1
@@ -0,0 +1,26 @@
+function WriteDocumentation($showDetailed) {
+
+        $currentContext = $psake.context.Peek()
+
+        if ($currentContext.tasks.default) {
+            $defaultTaskDependencies = $currentContext.tasks.default.DependsOn
+        } else {
+            $defaultTaskDependencies = @()
+        }
+
+        $docs = GetTasksFromContext $currentContext |
+                    Where-Object   {$_.Name -ne 'default'} |
+                    ForEach-Object {
+                        $isDefault = $null
+                        if ($defaultTaskDependencies -contains $_.Name) {
+                            $isDefault = $true
+                        }
+                        return Add-Member -InputObject $_ 'Default' $isDefault -PassThru
+                    }
+
+        if ($showDetailed) {
+            $docs | Sort-Object 'Name' | format-list -property Name,Alias,Description,@{Label="Depends On";Expression={$_.DependsOn -join ', '}},Default
+        } else {
+            $docs | Sort-Object 'Name' | format-table -autoSize -wrap -property Name,Alias,@{Label="Depends On";Expression={$_.DependsOn -join ', '}},Default,Description
+        }
+    }
diff --git a/.build/psake/private/WriteTaskTimeSummary.ps1 b/.build/psake/private/WriteTaskTimeSummary.ps1
new file mode 100644
index 0000000..732a2d6
--- /dev/null
+++ b/.build/psake/private/WriteTaskTimeSummary.ps1
@@ -0,0 +1,34 @@
+function WriteTaskTimeSummary($invokePsakeDuration) {
+    if ($psake.context.count -gt 0) {
+        $currentContext = $psake.context.Peek()
+        if ($currentContext.config.taskNameFormat -is [ScriptBlock]) {
+            & $currentContext.config.taskNameFormat "Build Time Report"
+        } elseif ($currentContext.config.taskNameFormat -ne "Executing {0}") {
+            $currentContext.config.taskNameFormat -f "Build Time Report"
+        }
+        else {
+            "-" * 70
+            "Build Time Report"
+            "-" * 70
+        }
+        $list = @()
+        while ($currentContext.executedTasks.Count -gt 0) {
+            $taskKey = $currentContext.executedTasks.Pop()
+            $task = $currentContext.tasks.$taskKey
+            if ($taskKey -eq "default") {
+                continue
+            }
+            $list += new-object PSObject -property @{
+                Name = $task.Name;
+                Duration = $task.Duration.ToString("hh\:mm\:ss\.fff")
+            }
+        }
+        [Array]::Reverse($list)
+        $list += new-object PSObject -property @{
+            Name = "Total:";
+            Duration = $invokePsakeDuration.ToString("hh\:mm\:ss\.fff")
+        }
+        # using "out-string | where-object" to filter out the blank line that format-table prepends
+        $list | format-table -autoSize -property Name,Duration | out-string -stream | where-object { $_ }
+    }
+}
diff --git a/.build/psake/psake b/.build/psake/psake
new file mode 100644
index 0000000..e2cbfc5
--- /dev/null
+++ b/.build/psake/psake
@@ -0,0 +1,12 @@
+#!/usr/bin/env sh
+
+# Use greadlink on macOS.
+if [ "$(uname)" = "Darwin" ]; then
+  which greadlink > /dev/null || {
+    printf 'GNU readlink not found\n'
+    exit 1
+  }
+  alias readlink="greadlink"
+fi
+
+pwsh -NoProfile -Command "& $(dirname "$(readlink -f -- "$0")")/psake.ps1 $@"
diff --git a/.build/psake/psake-config.ps1 b/.build/psake/psake-config.ps1
new file mode 100644
index 0000000..2c5001f
--- /dev/null
+++ b/.build/psake/psake-config.ps1
@@ -0,0 +1,22 @@
+<#
+-------------------------------------------------------------------
+Defaults
+-------------------------------------------------------------------
+$config.buildFileName="psakefile.ps1"
+$config.legacyBuildFileName="default.ps1"
+$config.framework = "4.0"
+$config.taskNameFormat="Executing {0}"
+$config.verboseError=$false
+$config.coloredOutput = $true
+$config.modules=$null
+
+-------------------------------------------------------------------
+Load modules from .\modules folder and from file my_module.psm1
+-------------------------------------------------------------------
+$config.modules=(".\modules\*.psm1",".\my_module.psm1")
+
+-------------------------------------------------------------------
+Use scriptblock for taskNameFormat
+-------------------------------------------------------------------
+$config.taskNameFormat= { param($taskName) "Executing $taskName at $(get-date)" }
+#>
diff --git a/.build/psake/psake.cmd b/.build/psake/psake.cmd
new file mode 100644
index 0000000..634314e
--- /dev/null
+++ b/.build/psake/psake.cmd
@@ -0,0 +1,14 @@
+@echo off
+rem Helper script for those who want to run psake from cmd.exe
+rem Example run from cmd.exe:
+rem psake "psakefile.ps1" "BuildHelloWord" "4.0"
+
+if '%1'=='/?' goto help
+if '%1'=='-help' goto help
+if '%1'=='-h' goto help
+
+powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0\psake.ps1' %*"
+exit /B %errorlevel%
+
+:help
+powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0\psake.ps1' -help"
diff --git a/.build/psake/psake.ps1 b/.build/psake/psake.ps1
new file mode 100644
index 0000000..0fe9e6f
--- /dev/null
+++ b/.build/psake/psake.ps1
@@ -0,0 +1,71 @@
+# Helper script for those who want to run psake without importing the module.
+# Example run from PowerShell:
+# .\psake.ps1 "psakefile.ps1" "BuildHelloWord" "4.0"
+
+# Must match parameter definitions for psake.psm1/invoke-psake
+# otherwise named parameter binding fails
+[cmdletbinding()]
+param(
+    [Parameter(Position = 0, Mandatory = $false)]
+    [string]$buildFile,
+
+    [Parameter(Position = 1, Mandatory = $false)]
+    [string[]]$taskList = @(),
+
+    [Parameter(Position = 2, Mandatory = $false)]
+    [string]$framework,
+
+    [Parameter(Position = 3, Mandatory = $false)]
+    [switch]$docs = $false,
+
+    [Parameter(Position = 4, Mandatory = $false)]
+    [System.Collections.Hashtable]$parameters = @{},
+
+    [Parameter(Position = 5, Mandatory = $false)]
+    [System.Collections.Hashtable]$properties = @{},
+
+    [Parameter(Position = 6, Mandatory = $false)]
+    [alias("init")]
+    [scriptblock]$initialization = {},
+
+    [Parameter(Position = 7, Mandatory = $false)]
+    [switch]$nologo = $false,
+
+    [Parameter(Position = 8, Mandatory = $false)]
+    [switch]$help = $false,
+
+    [Parameter(Position = 9, Mandatory = $false)]
+    [string]$scriptPath,
+
+    [Parameter(Position = 10, Mandatory = $false)]
+    [switch]$detailedDocs = $false,
+
+    [Parameter(Position = 11, Mandatory = $false)]
+    [switch]$notr = $false
+)
+
+# setting $scriptPath here, not as default argument, to support calling as "powershell -File psake.ps1"
+if (-not $scriptPath) {
+    $scriptPath = $(Split-Path -Path $MyInvocation.MyCommand.path -Parent)
+}
+
+# '[p]sake' is the same as 'psake' but $Error is not polluted
+Remove-Module -Name [p]sake -Verbose:$false
+Import-Module -Name (Join-Path -Path $scriptPath -ChildPath 'psake.psd1') -Verbose:$false
+if ($help) {
+    Get-Help -Name Invoke-psake -Full
+    return
+}
+
+if ($buildFile -and (-not (Test-Path -Path $buildFile))) {
+    $absoluteBuildFile = (Join-Path -Path $scriptPath -ChildPath $buildFile)
+    if (Test-path -Path $absoluteBuildFile) {
+        $buildFile = $absoluteBuildFile
+    }
+}
+
+Invoke-psake $buildFile $taskList $framework $docs $parameters $properties $initialization $nologo $detailedDocs $notr
+
+if (!$psake.build_success) {
+    exit 1
+}
diff --git a/.build/psake/psake.psd1 b/.build/psake/psake.psd1
new file mode 100644
index 0000000..0b8c0f8
--- /dev/null
+++ b/.build/psake/psake.psd1
@@ -0,0 +1,33 @@
+@{
+    RootModule        = 'psake.psm1'
+    ModuleVersion     = '4.9.0'
+    GUID              = 'cfb53216-072f-4a46-8975-ff7e6bda05a5'
+    Author            = 'James Kovacs'
+    Copyright         = 'Copyright (c) 2010-18 James Kovacs, Damian Hickey, Brandon Olin, and Contributors'
+    PowerShellVersion = '3.0'
+    Description       = 'psake is a build automation tool written in PowerShell.'
+    FunctionsToExport = @(
+        'Invoke-psake'
+        'Invoke-Task'
+        'Get-PSakeScriptTasks'
+        'Task'
+        'Properties'
+        'Include'
+        'FormatTaskName'
+        'TaskSetup'
+        'TaskTearDown'
+        'Framework'
+        'Assert'
+        'Exec'
+    )
+    VariablesToExport = 'psake'
+    PrivateData       = @{
+        PSData = @{
+            ReleaseNotes = 'https://raw.githubusercontent.com/psake/psake/master/CHANGELOG.md'
+            LicenseUri   = 'https://raw.githubusercontent.com/psake/psake/master/license.txt'
+            ProjectUri   = 'https://github.com/psake/psake'
+            Tags         = @('Build', 'Task')
+            IconUri      = 'https://raw.githubusercontent.com/psake/graphics/master/png/psake-single-icon-teal-bg-256x256.png'
+        }
+    }
+}
diff --git a/.build/psake/psake.psm1 b/.build/psake/psake.psm1
new file mode 100644
index 0000000..1d5f008
--- /dev/null
+++ b/.build/psake/psake.psm1
@@ -0,0 +1,112 @@
+# psake
+# Copyright (c) 2012 James Kovacs
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+#Requires -Version 2.0
+
+if ($PSVersionTable.PSVersion.Major -ge 3) {
+    $script:IgnoreError = 'Ignore'
+} else {
+    $script:IgnoreError = 'SilentlyContinue'
+}
+
+$script:nl = [System.Environment]::NewLine
+
+# Dot source public/private functions
+$dotSourceParams = @{
+    Filter      = '*.ps1'
+    Recurse     = $true
+    ErrorAction = 'Stop'
+}
+$public = @(Get-ChildItem -Path (Join-Path -Path $PSScriptRoot -ChildPath 'public') @dotSourceParams )
+$private = @(Get-ChildItem -Path (Join-Path -Path $PSScriptRoot -ChildPath 'private/*.ps1') @dotSourceParams)
+foreach ($import in @($public + $private)) {
+    try {
+        . $import.FullName
+    } catch {
+        throw "Unable to dot source [$($import.FullName)]"
+    }
+}
+
+DATA msgs {
+    convertfrom-stringdata @'
+    error_invalid_task_name = Task name should not be null or empty string.
+    error_task_name_does_not_exist = Task {0} does not exist.
+    error_circular_reference = Circular reference found for task {0}.
+    error_missing_action_parameter = Action parameter must be specified when using PreAction or PostAction parameters for task {0}.
+    error_corrupt_callstack = Call stack was corrupt. Expected {0}, but got {1}.
+    error_invalid_framework = Invalid .NET Framework version, {0} specified.
+    error_unknown_framework = Unknown .NET Framework version, {0} specified in {1}.
+    error_unknown_pointersize = Unknown pointer size ({0}) returned from System.IntPtr.
+    error_unknown_bitnesspart = Unknown .NET Framework bitness, {0}, specified in {1}.
+    error_unknown_module = Unable to find module [{0}].
+    error_no_framework_install_dir_found = No .NET Framework installation directory found at {0}.
+    error_bad_command = Error executing command {0}.
+    error_default_task_cannot_have_action = 'default' task cannot specify an action.
+    error_shared_task_cannot_have_action = '{0} references a shared task from module {1} and cannot have an action.
+    error_duplicate_task_name = Task {0} has already been defined.
+    error_duplicate_alias_name = Alias {0} has already been defined.
+    error_invalid_include_path = Unable to include {0}. File not found.
+    error_build_file_not_found = Could not find the build file {0}.
+    error_no_default_task = 'default' task required.
+    error_loading_module = Error loading module {0}.
+    warning_deprecated_framework_variable = Warning: Using global variable $framework to set .NET framework version used is deprecated. Instead use Framework function or configuration file psake-config.ps1.
+    warning_missing_vsssetup_module = Warning: Cannot find build tools version {0} without the module VSSetup. You can install this module with the command: Install-Module VSSetup -Scope CurrentUser
+    required_variable_not_set = Variable {0} must be set to run task {1}.
+    postcondition_failed = Postcondition failed for task {0}.
+    precondition_was_false = Precondition was false, not executing task {0}.
+    continue_on_error = Error in task {0}. {1}
+    psake_success = psake succeeded executing {0}
+'@
+}
+
+Import-LocalizedData -BindingVariable msgs -FileName messages.psd1 -ErrorAction $script:IgnoreError
+
+$scriptDir = Split-Path $MyInvocation.MyCommand.Path
+$manifestPath = Join-Path $scriptDir psake.psd1
+$manifest = Test-ModuleManifest -Path $manifestPath -WarningAction SilentlyContinue
+
+$script:psakeConfigFile = 'psake-config.ps1'
+
+$script:psake = @{}
+
+$psake.version = $manifest.Version.ToString()
+$psake.context = new-object system.collections.stack # holds onto the current state of all variables
+$psake.run_by_psake_build_tester = $false # indicates that build is being run by psake-BuildTester
+$psake.LoadedTaskModules = @{}
+$psake.ReferenceTasks = @{}
+$psake.config_default = new-object psobject -property @{
+    buildFileName       = "psakefile.ps1"
+    legacyBuildFileName = "default.ps1"
+    framework           = "4.0"
+    taskNameFormat      = "Executing {0}"
+    verboseError        = $false
+    coloredOutput       = $true
+    modules             = $null
+    moduleScope         = ""
+} # contains default configuration, can be overridden in psake-config.ps1 in directory with psake.psm1 or in directory with current build script
+
+$psake.build_success = $false # indicates that the current build was successful
+$psake.build_script_file = $null # contains a System.IO.FileInfo for the current build script
+$psake.build_script_dir = "" # contains a string with fully-qualified path to current build script
+$psake.error_message = $null # contains the error message which caused the script to fail
+
+LoadConfiguration
+
+export-modulemember -function $public.BaseName -variable psake
diff --git a/.build/psake/public/Assert.ps1 b/.build/psake/public/Assert.ps1
new file mode 100644
index 0000000..471e561
--- /dev/null
+++ b/.build/psake/public/Assert.ps1
@@ -0,0 +1,71 @@
+function Assert {
+    <#
+        .SYNOPSIS
+        Helper function for "Design by Contract" assertion checking.
+
+        .DESCRIPTION
+        This is a helper function that makes the code less noisy by eliminating many of the "if" statements that are normally required to verify assumptions in the code.
+
+        .PARAMETER conditionToCheck
+        The boolean condition to evaluate
+
+        .PARAMETER failureMessage
+        The error message used for the exception if the conditionToCheck parameter is false
+
+        .EXAMPLE
+        C:\PS>Assert $false "This always throws an exception"
+
+        Example of an assertion that will always fail.
+
+        .EXAMPLE
+        C:\PS>Assert ( ($i % 2) -eq 0 ) "$i is not an even number"
+
+        This exmaple may throw an exception if $i is not an even number
+
+        Note:
+        It might be necessary to wrap the condition with paranthesis to force PS to evaluate the condition
+        so that a boolean value is calculated and passed into the 'conditionToCheck' parameter.
+
+        Example:
+            Assert 1 -eq 2 "1 doesn't equal 2"
+
+        PS will pass 1 into the condtionToCheck variable and PS will look for a parameter called "eq" and
+        throw an exception with the following message "A parameter cannot be found that matches parameter name 'eq'"
+
+        The solution is to wrap the condition in () so that PS will evaluate it first.
+
+        Assert (1 -eq 2) "1 doesn't equal 2"
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        $conditionToCheck,
+
+        [Parameter(Mandatory = $true)]
+        [string]$failureMessage
+    )
+
+    if (-not $conditionToCheck) {
+        throw ('Assert: {0}' -f $failureMessage)
+    }
+}
diff --git a/.build/psake/public/BuildSetup.ps1 b/.build/psake/public/BuildSetup.ps1
new file mode 100644
index 0000000..4d00b7e
--- /dev/null
+++ b/.build/psake/public/BuildSetup.ps1
@@ -0,0 +1,55 @@
+function BuildSetup {
+    <#
+        .SYNOPSIS
+        Adds a scriptblock that will be executed once at the beginning of the build
+        .DESCRIPTION
+        This function will accept a scriptblock that will be executed once at the beginning of the build.
+        .PARAMETER setup
+        A scriptblock to execute
+        .EXAMPLE
+        A sample build script is shown below:
+        Task default -depends Test
+        Task Test -depends Compile, Clean {
+        }
+        Task Compile -depends Clean {
+        }
+        Task Clean {
+        }
+        BuildSetup {
+            "Running 'BuildSetup'"
+        }
+        The script above produces the following output:
+        Running 'BuildSetup'
+        Executing task, Clean...
+        Executing task, Compile...
+        Executing task, Test...
+        Build Succeeded
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        BuildTearDown
+        .LINK
+         TaskSetup
+         .LINK
+         TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [scriptblock]$setup
+    )
+
+    $psake.context.Peek().buildSetupScriptBlock = $setup
+}
\ No newline at end of file
diff --git a/.build/psake/public/BuildTearDown.ps1 b/.build/psake/public/BuildTearDown.ps1
new file mode 100644
index 0000000..2bb5502
--- /dev/null
+++ b/.build/psake/public/BuildTearDown.ps1
@@ -0,0 +1,75 @@
+function BuildTearDown {
+    <#
+        .SYNOPSIS
+        Adds a scriptblock that will be executed once at the end of the build
+        .DESCRIPTION
+        This function will accept a scriptblock that will be executed once at the end of the build, regardless of success or failure
+        .PARAMETER setup
+        A scriptblock to execute
+        .EXAMPLE
+        A sample build script is shown below:
+        Task default -depends Test
+        Task Test -depends Compile, Clean {
+        }
+        Task Compile -depends Clean {
+        }
+        Task Clean {
+        }
+        BuildTearDown {
+            "Running 'BuildTearDown'"
+        }
+        The script above produces the following output:
+        Executing task, Clean...
+        Executing task, Compile...
+        Executing task, Test...
+        Running 'BuildTearDown'
+        Build Succeeded
+        .EXAMPLE
+        A failing build script is shown below:
+        Task default -depends Test
+        Task Test -depends Compile, Clean {
+            throw "forced error"
+        }
+        Task Compile -depends Clean {
+        }
+        Task Clean {
+        }
+        BuildTearDown {
+            "Running 'BuildTearDown'"
+        }
+        The script above produces the following output:
+        Executing task, Clean...
+        Executing task, Compile...
+        Executing task, Test...
+        Running 'BuildTearDown'
+        forced error
+        At line:x char:x ...
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        BuildSetup
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [scriptblock]$setup
+    )
+
+    $psake.context.Peek().buildTearDownScriptBlock = $setup
+}
\ No newline at end of file
diff --git a/.build/psake/public/Exec.ps1 b/.build/psake/public/Exec.ps1
new file mode 100644
index 0000000..d934a0b
--- /dev/null
+++ b/.build/psake/public/Exec.ps1
@@ -0,0 +1,110 @@
+function Exec {
+    <#
+        .SYNOPSIS
+        Helper function for executing command-line programs.
+
+        .DESCRIPTION
+        This is a helper function that runs a scriptblock and checks the PS variable $lastexitcode to see if an error occcured.
+        If an error is detected then an exception is thrown.
+        This function allows you to run command-line programs without having to explicitly check fthe $lastexitcode variable.
+
+        .PARAMETER cmd
+        The scriptblock to execute. This scriptblock will typically contain the command-line invocation.
+
+        .PARAMETER errorMessage
+        The error message to display if the external command returned a non-zero exit code.
+
+        .PARAMETER maxRetries
+        The maximum number of times to retry the command before failing.
+
+        .PARAMETER retryTriggerErrorPattern
+        If the external command raises an exception, match the exception against this regex to determine if the command can be retried.
+        If a match is found, the command will be retried provided [maxRetries] has not been reached.
+
+        .PARAMETER workingDirectory
+        The working directory to set before running the external command.
+
+        .EXAMPLE
+        exec { svn info $repository_trunk } "Error executing SVN. Please verify SVN command-line client is installed"
+
+        This example calls the svn command-line client.
+        .LINK
+        Assert
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+        .LINK
+        Properties
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [scriptblock]$cmd,
+
+        [string]$errorMessage = ($msgs.error_bad_command -f $cmd),
+
+        [int]$maxRetries = 0,
+
+        [string]$retryTriggerErrorPattern = $null,
+
+        [string]$workingDirectory = $null
+    )
+
+    $tryCount = 1
+
+    do {
+        try {
+
+            if ($workingDirectory) {
+                Push-Location -Path $workingDirectory
+            }
+
+            $global:lastexitcode = 0
+            & $cmd
+            if ($global:lastexitcode -ne 0) {
+                throw "Exec: $errorMessage"
+            }
+            break
+        }
+        catch [Exception] {
+            if ($tryCount -gt $maxRetries) {
+                throw $_
+            }
+
+            if ($retryTriggerErrorPattern -ne $null) {
+                $isMatch = [regex]::IsMatch($_.Exception.Message, $retryTriggerErrorPattern)
+
+                if ($isMatch -eq $false) {
+                    throw $_
+                }
+            }
+
+            "Try $tryCount failed, retrying again in 1 second..."
+
+            $tryCount++
+
+            [System.Threading.Thread]::Sleep([System.TimeSpan]::FromSeconds(1))
+        }
+        finally {
+            if ($workingDirectory) {
+                Pop-Location
+            }
+        }
+    }
+    while ($true)
+}
diff --git a/.build/psake/public/FormatTaskName.ps1 b/.build/psake/public/FormatTaskName.ps1
new file mode 100644
index 0000000..a8be633
--- /dev/null
+++ b/.build/psake/public/FormatTaskName.ps1
@@ -0,0 +1,95 @@
+function FormatTaskName {
+    <#
+        .SYNOPSIS
+        This function allows you to change how psake renders the task name during a build.
+
+        .DESCRIPTION
+        This function takes either a string which represents a format string (formats using the -f format operator see "help about_operators") or it can accept a script block that has a single parameter that is the name of the task that will be executed.
+
+        .PARAMETER format
+        A format string or a scriptblock to execute
+
+        .EXAMPLE
+        A sample build script that uses a format string is shown below:
+
+        Task default -depends TaskA, TaskB, TaskC
+
+        FormatTaskName "-------- {0} --------"
+
+        Task TaskA {
+        "TaskA is executing"
+        }
+
+        Task TaskB {
+        "TaskB is executing"
+        }
+
+        Task TaskC {
+        "TaskC is executing"
+
+        -----------
+        The script above produces the following output:
+
+        -------- TaskA --------
+        TaskA is executing
+        -------- TaskB --------
+        TaskB is executing
+        -------- TaskC --------
+        TaskC is executing
+
+        Build Succeeded!
+        .EXAMPLE
+        A sample build script that uses a ScriptBlock is shown below:
+
+        Task default -depends TaskA, TaskB, TaskC
+
+        FormatTaskName {
+            param($taskName)
+            write-host "Executing Task: $taskName" -foregroundcolor blue
+        }
+
+        Task TaskA {
+        "TaskA is executing"
+        }
+
+        Task TaskB {
+        "TaskB is executing"
+        }
+
+        Task TaskC {
+        "TaskC is executing"
+        }
+
+        -----------
+        The above example uses the scriptblock parameter to the FormatTaskName function to render each task name in the color blue.
+
+        Note: the $taskName parameter is arbitrary, it could be named anything.
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        $format
+    )
+
+    $psake.context.Peek().config.taskNameFormat = $format
+}
diff --git a/.build/psake/public/Framework.ps1 b/.build/psake/public/Framework.ps1
new file mode 100644
index 0000000..304bb06
--- /dev/null
+++ b/.build/psake/public/Framework.ps1
@@ -0,0 +1,55 @@
+function Framework {
+    <#
+    .SYNOPSIS
+    Sets the version of the .NET framework you want to use during build.
+
+    .DESCRIPTION
+    This function will accept a string containing version of the .NET framework to use during build.
+    Possible values: '1.0', '1.1', '2.0', '2.0x86', '2.0x64', '3.0', '3.0x86', '3.0x64', '3.5', '3.5x86', '3.5x64', '4.0', '4.0x86', '4.0x64', '4.5', '4.5x86', '4.5x64', '4.5.1', '4.5.1x86', '4.5.1x64'.
+    Default is '3.5*', where x86 or x64 will be detected based on the bitness of the PowerShell process.
+
+    .PARAMETER framework
+    Version of the .NET framework to use during build.
+
+    .EXAMPLE
+    Framework "4.0"
+
+    Task default -depends Compile
+
+    Task Compile -depends Clean {
+        msbuild /version
+    }
+
+    -----------
+    The script above will output detailed version of msbuid v4
+    .LINK
+    Assert
+    .LINK
+    Exec
+    .LINK
+    FormatTaskName
+    .LINK
+    Get-PSakeScriptTasks
+    .LINK
+    Include
+    .LINK
+    Invoke-psake
+    .LINK
+    Properties
+    .LINK
+    Task
+    .LINK
+    TaskSetup
+    .LINK
+    TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [string]$framework
+    )
+
+    $psake.context.Peek().config.framework = $framework
+
+    ConfigureBuildEnvironment
+}
diff --git a/.build/psake/public/Get-PSakeScriptTasks.ps1 b/.build/psake/public/Get-PSakeScriptTasks.ps1
new file mode 100644
index 0000000..e0f8f96
--- /dev/null
+++ b/.build/psake/public/Get-PSakeScriptTasks.ps1
@@ -0,0 +1,45 @@
+function Get-PSakeScriptTasks {
+    <#
+    .SYNOPSIS
+    Returns meta data about all the tasks defined in the provided psake script.
+
+    .DESCRIPTION
+    Returns meta data about all the tasks defined in the provided psake script.
+
+    .PARAMETER buildFile
+    The path to the psake build script to read the tasks from.
+
+    .EXAMPLE
+    PS C:\>Get-PSakeScriptTasks -buildFile '.\build.ps1'
+
+    DependsOn        Alias Name    Description
+    ---------        ----- ----    -----------
+    {}                     Compile
+    {}                     Clean
+    {Test}                 Default
+    {Clean, Compile}       Test
+
+    Gets the psake tasks contained in the 'build.ps1' file.
+
+    .LINK
+    Invoke-psake
+    #>
+    [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseSingularNouns', '')]
+    [CmdletBinding()]
+    param(
+        [string]$buildFile
+    )
+
+    if (-not $buildFile) {
+        $buildFile = $psake.config_default.buildFileName
+    }
+
+    try {
+        ExecuteInBuildFileScope $buildFile $MyInvocation.MyCommand.Module {
+            param($currentContext, $module)
+            return GetTasksFromContext $currentContext
+        }
+    } finally {
+        CleanupEnvironment
+    }
+}
diff --git a/.build/psake/public/Include.ps1 b/.build/psake/public/Include.ps1
new file mode 100644
index 0000000..3c163fe
--- /dev/null
+++ b/.build/psake/public/Include.ps1
@@ -0,0 +1,64 @@
+function Include {
+    <#
+        .SYNOPSIS
+        Include the functions or code of another powershell script file into the current build script's scope
+
+        .DESCRIPTION
+        A build script may declare an "includes" function which allows you to define a file containing powershell code to be included
+        and added to the scope of the currently running build script. Code from such file will be executed after code from build script.
+
+        .PARAMETER fileNamePathToInclude
+        A string containing the path and name of the powershell file to include
+
+        .EXAMPLE
+        A sample build script is shown below:
+
+        Include ".\build_utils.ps1"
+
+        Task default -depends Test
+
+        Task Test -depends Compile, Clean {
+        }
+
+        Task Compile -depends Clean {
+        }
+
+        Task Clean {
+        }
+
+        -----------
+        The script above includes all the functions and variables defined in the ".\build_utils.ps1" script into the current build script's scope
+
+        Note: You can have more than 1 "Include" function defined in the build script.
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [string]$fileNamePathToInclude
+    )
+
+    Assert (test-path $fileNamePathToInclude -pathType Leaf) ($msgs.error_invalid_include_path -f $fileNamePathToInclude)
+
+    $psake.context.Peek().includes.Enqueue((Resolve-Path $fileNamePathToInclude));
+}
diff --git a/.build/psake/public/Invoke-Task.ps1 b/.build/psake/public/Invoke-Task.ps1
new file mode 100644
index 0000000..e441170
--- /dev/null
+++ b/.build/psake/public/Invoke-Task.ps1
@@ -0,0 +1,158 @@
+function Invoke-Task {
+    <#
+        .SYNOPSIS
+        Executes another task in the current build script.
+
+        .DESCRIPTION
+        This is a function that will allow you to invoke a Task from within another Task in the current build script.
+
+        .PARAMETER taskName
+        The name of the task to execute.
+
+        .EXAMPLE
+        Invoke-Task "Compile"
+
+        This example calls the "Compile" task.
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [string]$taskName
+    )
+
+    Assert $taskName ($msgs.error_invalid_task_name)
+
+    $taskKey = $taskName.ToLower()
+
+    $currentContext = $psake.context.Peek()
+
+    if ($currentContext.aliases.Contains($taskKey)) {
+        $taskName = $currentContext.aliases.$taskKey.Name
+        $taskKey = $taskName.ToLower()
+    }
+
+    Assert ($currentContext.tasks.Contains($taskKey)) ($msgs.error_task_name_does_not_exist -f $taskName)
+
+    if ($currentContext.executedTasks.Contains($taskKey))  { return }
+
+    Assert (!$currentContext.callStack.Contains($taskKey)) ($msgs.error_circular_reference -f $taskName)
+
+    $currentContext.callStack.Push($taskKey)
+
+    $task = $currentContext.tasks.$taskKey
+
+    $precondition_is_valid = & $task.Precondition
+
+    if (!$precondition_is_valid) {
+        WriteColoredOutput ($msgs.precondition_was_false -f $taskName) -foregroundcolor Cyan
+    } else {
+        if ($taskKey -ne 'default') {
+
+            if ($task.PreAction -or $task.PostAction) {
+                Assert ($null -ne $task.Action) ($msgs.error_missing_action_parameter -f $taskName)
+            }
+
+            if ($task.Action) {
+
+                $stopwatch = new-object System.Diagnostics.Stopwatch
+
+                try {
+                    foreach($childTask in $task.DependsOn) {
+                        Invoke-Task $childTask
+                    }
+                    $stopwatch.Start()
+
+                    $currentContext.currentTaskName = $taskName
+
+                    try {
+                        & $currentContext.taskSetupScriptBlock @($task)
+                        try {
+                            if ($task.PreAction) {
+                                & $task.PreAction
+                            }
+
+                            if ($currentContext.config.taskNameFormat -is [ScriptBlock]) {
+                                $taskHeader = & $currentContext.config.taskNameFormat $taskName
+                            } else {
+                                $taskHeader = $currentContext.config.taskNameFormat -f $taskName
+                            }
+                            WriteColoredOutput $taskHeader -foregroundcolor Cyan
+
+                            foreach ($variable in $task.requiredVariables) {
+                                Assert ((Test-Path "variable:$variable") -and ($null -ne (Get-Variable $variable).Value)) ($msgs.required_variable_not_set -f $variable, $taskName)
+                            }
+
+                            & $task.Action
+                        } finally {
+                            if ($task.PostAction) {
+                                & $task.PostAction
+                            }
+                        }
+                    } catch {
+                        # want to catch errors here _before_ we invoke TaskTearDown
+                        # so that TaskTearDown reliably gets the Task-scoped
+                        # success/fail/error context.
+                        $task.Success        = $false
+                        $task.ErrorMessage   = $_
+                        $task.ErrorDetail    = $_ | Out-String
+                        $task.ErrorFormatted = FormatErrorMessage $_
+
+                        throw $_ # pass this up the chain; cleanup is handled higher int he stack
+                    } finally {
+                        & $currentContext.taskTearDownScriptBlock $task
+                    }
+                } catch {
+                    if ($task.ContinueOnError) {
+                        "-"*70
+                        WriteColoredOutput ($msgs.continue_on_error -f $taskName,$_) -foregroundcolor Yellow
+                        "-"*70
+                        [void]$currentContext.callStack.Pop()
+                    }  else {
+                        throw $_
+                    }
+                } finally {
+                    $task.Duration = $stopwatch.Elapsed
+                }
+            } else {
+                # no action was specified but we still execute all the dependencies
+                foreach($childTask in $task.DependsOn) {
+                    Invoke-Task $childTask
+                }
+            }
+        } else {
+            foreach($childTask in $task.DependsOn) {
+                Invoke-Task $childTask
+            }
+        }
+
+        Assert (& $task.Postcondition) ($msgs.postcondition_failed -f $taskName)
+    }
+
+    $poppedTaskKey = $currentContext.callStack.Pop()
+    Assert ($poppedTaskKey -eq $taskKey) ($msgs.error_corrupt_callstack -f $taskKey,$poppedTaskKey)
+
+    $currentContext.executedTasks.Push($taskKey)
+}
diff --git a/.build/psake/public/Invoke-psake.ps1 b/.build/psake/public/Invoke-psake.ps1
new file mode 100644
index 0000000..2e9a65a
--- /dev/null
+++ b/.build/psake/public/Invoke-psake.ps1
@@ -0,0 +1,343 @@
+function Invoke-psake {
+    <#
+        .SYNOPSIS
+        Runs a psake build script.
+
+        .DESCRIPTION
+        This function runs a psake build script
+
+        .PARAMETER buildFile
+        The path to the psake build script to execute
+
+        .PARAMETER taskList
+        A comma-separated list of task names to execute
+
+        .PARAMETER framework
+        The version of the .NET framework you want to use during build. You can append x86 or x64 to force a specific framework.
+        If not specified, x86 or x64 will be detected based on the bitness of the PowerShell process.
+        Possible values: '1.0', '1.1', '2.0', '2.0x86', '2.0x64', '3.0', '3.0x86', '3.0x64', '3.5', '3.5x86', '3.5x64', '4.0', '4.0x86', '4.0x64', '4.5', '4.5x86', '4.5x64', '4.5.1', '4.5.1x86', '4.5.1x64'
+
+        .PARAMETER docs
+        Prints a list of tasks and their descriptions
+
+        .PARAMETER parameters
+        A hashtable containing parameters to be passed into the current build script.
+        These parameters will be processed before the 'Properties' function of the script is processed.
+        This means you can access parameters from within the 'Properties' function!
+
+        .PARAMETER properties
+        A hashtable containing properties to be passed into the current build script.
+        These properties will override matching properties that are found in the 'Properties' function of the script.
+
+        .PARAMETER initialization
+        Parameter description
+
+        .PARAMETER nologo
+        Do not display the startup banner and copyright message.
+
+        .PARAMETER detailedDocs
+        Prints a more descriptive list of tasks and their descriptions.
+
+        .PARAMETER notr
+        Do not display the time report.
+
+        .EXAMPLE
+        Invoke-psake
+
+        Runs the 'default' task in the '.build.ps1' build script
+
+        .EXAMPLE
+        Invoke-psake '.\build.ps1' Tests,Package
+
+        Runs the 'Tests' and 'Package' tasks in the '.build.ps1' build script
+
+        .EXAMPLE
+        Invoke-psake Tests
+
+        This example will run the 'Tests' tasks in the 'psakefile.ps1' build script. The 'psakefile.ps1' is assumed to be in the current directory.
+
+        .EXAMPLE
+        Invoke-psake 'Tests, Package'
+
+        This example will run the 'Tests' and 'Package' tasks in the 'psakefile.ps1' build script. The 'psakefile.ps1' is assumed to be in the current directory.
+
+        .EXAMPLE
+        Invoke-psake .\build.ps1 -docs
+
+        Prints a report of all the tasks and their dependencies and descriptions and then exits
+
+        .EXAMPLE
+        Invoke-psake .\parameters.ps1 -parameters @{"p1"="v1";"p2"="v2"}
+
+        Runs the build script called 'parameters.ps1' and passes in parameters 'p1' and 'p2' with values 'v1' and 'v2'
+
+        Here's the .\parameters.ps1 build script:
+
+        properties {
+            $my_property = $p1 + $p2
+        }
+
+        task default -depends TestParams
+
+        task TestParams {
+            Assert ($my_property -ne $null) '$my_property should not be null'
+        }
+
+        Notice how you can refer to the parameters that were passed into the script from within the "properties" function.
+        The value of the $p1 variable should be the string "v1" and the value of the $p2 variable should be "v2".
+
+        .EXAMPLE
+        Invoke-psake .\properties.ps1 -properties @{"x"="1";"y"="2"}
+
+        Runs the build script called 'properties.ps1' and passes in parameters 'x' and 'y' with values '1' and '2'
+
+        This feature allows you to override existing properties in your build script.
+
+        Here's the .\properties.ps1 build script:
+
+        properties {
+            $x = $null
+            $y = $null
+            $z = $null
+        }
+
+        task default -depends TestProperties
+
+        task TestProperties {
+            Assert ($x -ne $null) "x should not be null"
+            Assert ($y -ne $null) "y should not be null"
+            Assert ($z -eq $null) "z should be null"
+        }
+
+        .NOTES
+        ---- Exceptions ----
+
+        If there is an exception thrown during the running of a build script psake will set the '$psake.build_success' variable to $false.
+        To detect failue outside PowerShell (for example by build server), finish PowerShell process with non-zero exit code when '$psake.build_success' is $false.
+        Calling psake from 'cmd.exe' with 'psake.cmd' will give you that behaviour.
+
+        ---- $psake variable ----
+
+        When the psake module is loaded a variable called $psake is created which is a hashtable
+        containing some variables:
+
+        $psake.version                      # contains the current version of psake
+        $psake.context                      # holds onto the current state of all variables
+        $psake.run_by_psake_build_tester    # indicates that build is being run by psake-BuildTester
+        $psake.config_default               # contains default configuration
+                                            # can be overriden in psake-config.ps1 in directory with psake.psm1 or in directory with current build script
+        $psake.build_success                # indicates that the current build was successful
+        $psake.build_script_file            # contains a System.IO.FileInfo for the current build script
+        $psake.build_script_dir             # contains the fully qualified path to the current build script
+        $psake.error_message                # contains the error message which caused the script to fail
+
+        You should see the following when you display the contents of the $psake variable right after importing psake
+
+        PS projects:\psake\> Import-Module .\psake.psm1
+        PS projects:\psake\> $psake
+
+        Name                           Value
+        ----                           -----
+        run_by_psake_build_tester      False
+        version                        4.2
+        build_success                  False
+        build_script_file
+        build_script_dir
+        config_default                 @{framework=3.5; ...
+        context                        {}
+        error_message
+
+        After a build is executed the following $psake values are updated: build_script_file, build_script_dir, build_success
+
+        PS projects:\psake\> Invoke-psake .\examples\psakefile.ps1
+        Executing task: Clean
+        Executed Clean!
+        Executing task: Compile
+        Executed Compile!
+        Executing task: Test
+        Executed Test!
+
+        Build Succeeded!
+
+        ----------------------------------------------------------------------
+        Build Time Report
+        ----------------------------------------------------------------------
+        Name    Duration
+        ----    --------
+        Clean   00:00:00.0798486
+        Compile 00:00:00.0869948
+        Test    00:00:00.0958225
+        Total:  00:00:00.2712414
+
+        PS projects:\psake\> $psake
+
+        Name                           Value
+        ----                           -----
+        build_script_file              YOUR_PATH\examples\psakefile.ps1
+        run_by_psake_build_tester      False
+        build_script_dir               YOUR_PATH\examples
+        context                        {}
+        version                        4.2
+        build_success                  True
+        config_default                 @{framework=3.5; ...
+        error_message
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+        .LINK
+        Properties
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Position = 0, Mandatory = $false)]
+        [string]$buildFile,
+
+        [Parameter(Position = 1, Mandatory = $false)]
+        [string[]]$taskList = @(),
+
+        [Parameter(Position = 2, Mandatory = $false)]
+        [string]$framework,
+
+        [Parameter(Position = 3, Mandatory = $false)]
+        [switch]$docs = $false,
+
+        [Parameter(Position = 4, Mandatory = $false)]
+        [hashtable]$parameters = @{},
+
+        [Parameter(Position = 5, Mandatory = $false)]
+        [hashtable]$properties = @{},
+
+        [Parameter(Position = 6, Mandatory = $false)]
+        [alias("init")]
+        [scriptblock]$initialization = {},
+
+        [Parameter(Position = 7, Mandatory = $false)]
+        [switch]$nologo,
+
+        [Parameter(Position = 8, Mandatory = $false)]
+        [switch]$detailedDocs,
+
+        [Parameter(Position = 9, Mandatory = $false)]
+        [switch]$notr # disable time report
+    )
+
+    try {
+        if (-not $nologo) {
+            "psake version {0}$($script:nl)Copyright (c) 2010-2018 James Kovacs & Contributors$($script:nl)" -f $psake.version
+        }
+        if (!$buildFile) {
+           $buildFile = Get-DefaultBuildFile
+        }
+        elseif (!(Test-Path $buildFile -PathType Leaf) -and ($null -ne (Get-DefaultBuildFile -UseDefaultIfNoneExist $false))) {
+            # If the default file exists and the given "buildfile" isn't found assume that the given
+            # $buildFile is actually the target Tasks to execute in the $config.buildFileName script.
+            $taskList = $buildFile.Split(', ')
+            $buildFile = Get-DefaultBuildFile
+        }
+
+        $psake.error_message = $null
+
+        ExecuteInBuildFileScope $buildFile $MyInvocation.MyCommand.Module {
+            param($currentContext, $module)
+
+            $stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
+
+            if ($docs -or $detailedDocs) {
+                WriteDocumentation($detailedDocs)
+                return
+            }
+
+            try {
+                foreach ($key in $parameters.keys) {
+                    if (test-path "variable:\$key") {
+                        set-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null
+                    } else {
+                        new-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null
+                    }
+                }
+            } catch {
+                WriteColoredOutput "Parameter '$key' is null" -foregroundcolor Red
+                throw
+            }
+
+            # The initial dot (.) indicates that variables initialized/modified in the propertyBlock are available in the parent scope.
+            while ($currentContext.properties.Count -gt 0) {
+                $propertyBlock = $currentContext.properties.Pop()
+                . $propertyBlock
+            }
+
+            foreach ($key in $properties.keys) {
+                if (test-path "variable:\$key") {
+                    set-item -path "variable:\$key" -value $properties.$key -WhatIf:$false -Confirm:$false | out-null
+                }
+            }
+
+            # Simple dot sourcing will not work. We have to force the script block into our
+            # module's scope in order to initialize variables properly.
+            . $module $initialization
+
+            & $currentContext.buildSetupScriptBlock
+
+            # Execute the list of tasks or the default task
+            try {
+                if ($taskList) {
+                    foreach ($task in $taskList) {
+                        invoke-task $task
+                    }
+                } elseif ($currentContext.tasks.default) {
+                    invoke-task default
+                } else {
+                    throw $msgs.error_no_default_task
+                }
+            }
+            finally {
+                & $currentContext.buildTearDownScriptBlock
+            }
+
+            $successMsg = $msgs.psake_success -f $buildFile
+            WriteColoredOutput ("$($script:nl)${successMsg}$($script:nl)") -foregroundcolor Green
+
+            $stopwatch.Stop()
+            if (-not $notr) {
+                WriteTaskTimeSummary $stopwatch.Elapsed
+            }
+        }
+
+        $psake.build_success = $true
+
+    } catch {
+        $psake.build_success = $false
+        $psake.error_message = FormatErrorMessage $_
+
+        # if we are running in a nested scope (i.e. running a psake script from a psake script) then we need to re-throw the exception
+        # so that the parent script will fail otherwise the parent script will report a successful build
+        $inNestedScope = ($psake.context.count -gt 1)
+        if ( $inNestedScope ) {
+            throw $_
+        } else {
+            if (!$psake.run_by_psake_build_tester) {
+                WriteColoredOutput $psake.error_message -foregroundcolor Red
+            }
+        }
+    } finally {
+        CleanupEnvironment
+    }
+}
diff --git a/.build/psake/public/Properties.ps1 b/.build/psake/public/Properties.ps1
new file mode 100644
index 0000000..0d4776b
--- /dev/null
+++ b/.build/psake/public/Properties.ps1
@@ -0,0 +1,61 @@
+function Properties {
+    <#
+        .SYNOPSIS
+        Define a scriptblock that contains assignments to variables that will be available to all tasks in the build script
+
+        .DESCRIPTION
+        A build script may declare a "Properies" function which allows you to define variables that will be available to all the "Task" functions in the build script.
+
+        .PARAMETER properties
+        The script block containing all the variable assignment statements
+
+        .EXAMPLE
+        A sample build script is shown below:
+
+        Properties {
+            $build_dir = "c:\build"
+            $connection_string = "datasource=localhost;initial catalog=northwind;integrated security=sspi"
+        }
+
+        Task default -depends Test
+
+        Task Test -depends Compile, Clean {
+        }
+
+        Task Compile -depends Clean {
+        }
+
+        Task Clean {
+        }
+
+        Note: You can have more than one "Properties" function defined in the build script.
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [scriptblock]$properties
+    )
+
+    $psake.context.Peek().properties.Push($properties)
+}
diff --git a/.build/psake/public/Task.ps1 b/.build/psake/public/Task.ps1
new file mode 100644
index 0000000..68e65d0
--- /dev/null
+++ b/.build/psake/public/Task.ps1
@@ -0,0 +1,331 @@
+function Task {
+    <#
+        .SYNOPSIS
+        Defines a build task to be executed by psake
+
+        .DESCRIPTION
+        This function creates a 'task' object that will be used by the psake engine to execute a build task.
+        Note: There must be at least one task called 'default' in the build script
+
+        .PARAMETER name
+        The name of the task
+
+        .PARAMETER action
+        A scriptblock containing the statements to execute for the task.
+
+        .PARAMETER preaction
+        A scriptblock to be executed before the 'Action' scriptblock.
+        Note: This parameter is ignored if the 'Action' scriptblock is not defined.
+
+        .PARAMETER postaction
+        A scriptblock to be executed after the 'Action' scriptblock.
+        Note: This parameter is ignored if the 'Action' scriptblock is not defined.
+
+        .PARAMETER precondition
+        A scriptblock that is executed to determine if the task is executed or skipped.
+        This scriptblock should return $true or $false
+
+        .PARAMETER postcondition
+        A scriptblock that is executed to determine if the task completed its job correctly.
+        An exception is thrown if the scriptblock returns $false.
+
+        .PARAMETER continueOnError
+        If this switch parameter is set then the task will not cause the build to fail when an exception is thrown by the task
+
+        .PARAMETER depends
+        An array of task names that this task depends on.
+        These tasks will be executed before the current task is executed.
+
+        .PARAMETER requiredVariables
+        An array of names of variables that must be set to run this task.
+
+        .PARAMETER description
+        A description of the task.
+
+        .PARAMETER alias
+        An alternate name for the task.
+
+        .PARAMETER FromModule
+        Load in the task from the specified PowerShell module.
+
+        .PARAMETER requiredVersion
+        The specific version of a module to load the task from
+
+        .PARAMETER minimumVersion
+        The minimum (inclusive) version of the PowerShell module to load in the task from.
+
+        .PARAMETER maximumVersion
+        The maximum (inclusive) version of the PowerShell module to load in the task from.
+
+        .PARAMETER lessThanVersion
+        The version of the PowerShell module to load in the task from that should not be met or exceeded. eg -lessThanVersion 2.0.0 will reject anything 2.0.0 or higher, allowing any module in the 1.x.x series.
+
+        .EXAMPLE
+        A sample build script is shown below:
+
+        Task default -Depends Test
+
+        Task Test -Depends Compile, Clean {
+            "This is a test"
+        }
+
+        Task Compile -Depends Clean {
+            "Compile"
+        }
+
+        Task Clean {
+            "Clean"
+        }
+
+        The 'default' task is required and should not contain an 'Action' parameter.
+        It uses the 'Depends' parameter to specify that 'Test' is a dependency
+
+        The 'Test' task uses the 'Depends' parameter to specify that 'Compile' and 'Clean' are dependencies
+        The 'Compile' task depends on the 'Clean' task.
+
+        Note:
+        The 'Action' parameter is defaulted to the script block following the 'Clean' task.
+
+        An equivalent 'Test' task is shown below:
+
+        Task Test -Depends Compile, Clean -Action {
+            $testMessage
+        }
+
+        The output for the above sample build script is shown below:
+
+        Executing task, Clean...
+        Clean
+        Executing task, Compile...
+        Compile
+        Executing task, Test...
+        This is a test
+
+        Build Succeeded!
+
+        ----------------------------------------------------------------------
+        Build Time Report
+        ----------------------------------------------------------------------
+        Name    Duration
+        ----    --------
+        Clean   00:00:00.0065614
+        Compile 00:00:00.0133268
+        Test    00:00:00.0225964
+        Total:  00:00:00.0782496
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        TaskSetup
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding(DefaultParameterSetName = 'Normal')]
+    param(
+        [Parameter(Mandatory = $true, Position = 0)]
+        [string]$name,
+
+        [Parameter(Position = 1)]
+        [scriptblock]$action = $null,
+
+        [Parameter(Position = 2)]
+        [scriptblock]$preaction = $null,
+
+        [Parameter(Position = 3)]
+        [scriptblock]$postaction = $null,
+
+        [Parameter(Position = 4)]
+        [scriptblock]$precondition = {$true},
+
+        [Parameter(Position = 5)]
+        [scriptblock]$postcondition = {$true},
+
+        [Parameter(Position = 6)]
+        [switch]$continueOnError,
+
+        [ValidateNotNull()]
+        [Parameter(Position = 7)]
+        [string[]]$depends = @(),
+
+        [ValidateNotNull()]
+        [Parameter(Position = 8)]
+        [string[]]$requiredVariables = @(),
+
+        [Parameter(Position = 9)]
+        [string]$description = $null,
+
+        [Parameter(Position = 10)]
+        [string]$alias = $null,
+
+        [parameter(Mandatory = $true, ParameterSetName = 'SharedTask', Position = 11)]
+        [ValidateNotNullOrEmpty()]
+        [string]$FromModule,
+
+        [Alias('Version')]
+        [parameter(ParameterSetName = 'SharedTask', Position = 12)]
+        [string]$requiredVersion,
+
+        [parameter(ParameterSetName = 'SharedTask', Position = 13)]
+        [string]$minimumVersion,
+
+        [parameter(ParameterSetName = 'SharedTask', Position = 14)]
+        [string]$maximumVersion,
+
+        [parameter(ParameterSetName = 'SharedTask', Position = 15)]
+        [string]$lessThanVersion
+    )
+
+    function CreateTask {
+        @{
+            Name              = $Name
+            DependsOn         = $depends
+            PreAction         = $preaction
+            Action            = $action
+            PostAction        = $postaction
+            Precondition      = $precondition
+            Postcondition     = $postcondition
+            ContinueOnError   = $continueOnError
+            Description       = $description
+            Duration          = [System.TimeSpan]::Zero
+            RequiredVariables = $requiredVariables
+            Alias             = $alias
+            Success           = $true # let's be optimistic
+            ErrorMessage      = $null
+            ErrorDetail       = $null
+            ErrorFormatted    = $null
+        }
+    }
+
+    # Default tasks have no action
+    if ($name -eq 'default') {
+        Assert (!$action) ($msgs.error_shared_task_cannot_have_action)
+    }
+
+    # Shared tasks have no action
+    if ($PSCmdlet.ParameterSetName -eq 'SharedTask') {
+        Assert (!$action) ($msgs.error_shared_task_cannot_have_action -f $Name, $FromModule)
+    }
+
+    $currentContext = $psake.context.Peek()
+
+    # Dot source the shared task module to load in its tasks
+    if ($PSCmdlet.ParameterSetName -eq 'SharedTask') {
+        $testModuleParams = @{
+            minimumVersion  = $minimumVersion
+            maximumVersion  = $maximumVersion
+            lessThanVersion = $lessThanVersion
+        }
+
+        if(![string]::IsNullOrEmpty($requiredVersion)){
+            $testModuleParams.minimumVersion = $requiredVersion
+            $testModuleParams.maximumVersion = $requiredVersion
+        }
+
+        if ($taskModule = Get-Module -Name $FromModule) {
+            # Use the task module that is already loaded into the session
+            $testModuleParams.currentVersion  = $taskModule.Version
+            $taskModule = Where-Object -InputObject $taskModule -FilterScript {Test-ModuleVersion @testModuleParams}
+        } else {
+            # Find the module
+            $getModuleParams = @{
+                ListAvailable = $true
+                Name          = $FromModule
+                ErrorAction   = 'Ignore'
+                Verbose       = $false
+            }
+            $taskModule = Get-Module @getModuleParams |
+                            Where-Object -FilterScript {Test-ModuleVersion -currentVersion $_.Version @testModuleParams} |
+                            Sort-Object -Property Version -Descending |
+                            Select-Object -First 1
+        }
+
+        # This task references a task from a module
+        # This reference task "could" include extra data about the task such as
+        # additional dependOn, aliase, etc.
+        # Store this task to the side so after we load the real task, we can combine
+        # this extra data if nesessary
+        $referenceTask = CreateTask
+        Assert (-not $psake.ReferenceTasks.ContainsKey($referenceTask.Name)) ($msgs.error_duplicate_task_name -f $referenceTask.Name)
+        $referenceTaskKey = $referenceTask.Name.ToLower()
+        $psake.ReferenceTasks.Add($referenceTaskKey, $referenceTask)
+
+        # Load in tasks from shared module into staging area
+        Assert ($null -ne $taskModule) ($msgs.error_unknown_module -f $FromModule)
+        $psakeFilePath = Join-Path -Path $taskModule.ModuleBase -ChildPath 'psakeFile.ps1'
+        if (-not $psake.LoadedTaskModules.ContainsKey($psakeFilePath)) {
+            Write-Debug -Message "Loading tasks from task module [$psakeFilePath]"
+            . $psakeFilePath
+            $psake.LoadedTaskModules.Add($psakeFilePath, $null)
+        }
+    } else {
+        # Create new task object
+        $newTask = CreateTask
+        $taskKey = $newTask.Name.ToLower()
+
+        # If this task was referenced from a parent build script
+        # check to see if that reference task has extra data to add
+        $refTask = $psake.ReferenceTasks[$taskKey]
+        if ($refTask) {
+
+            # Override the preaction
+            if ($refTask.PreAction -ne $newTask.PreAction) {
+                $newTask.PreAction = $refTask.PreAction
+            }
+
+            # Override the postaction
+            if ($refTask.PostAction -ne $newTask.PostAction) {
+                $newTask.PostAction = $refTask.PostAction
+            }
+
+            # Override the precondition
+            if ($refTask.PreCondition -ne $newTask.PreCondition) {
+                $newTask.PreCondition = $refTask.PreCondition
+            }
+
+            # Override the postcondition
+            if ($refTask.PostCondition -ne $newTask.PostCondition) {
+                $newTask.PostCondition = $refTask.PostCondition
+            }
+
+            # Override the continueOnError
+            if ($refTask.ContinueOnError) {
+                $newTask.ContinueOnError = $refTask.ContinueOnError
+            }
+
+            # Override the depends
+            if ($refTask.DependsOn.Count -gt 0 -and (Compare-Object -ReferenceObject $refTask.DependsOn -DifferenceObject $newTask.DependsOn)) {
+                $newTask.DependsOn = $refTask.DependsOn
+            }
+
+            # Override the requiredVariables
+            if ($refTask.RequiredVariables.Count -gt 0 -and (Compare-Object -ReferenceObject.RequiredVariables -DifferenceObject $newTask.RequiredVariables)) {
+                $newTask.RequiredVariables += $refTask.RequiredVariables
+            }
+        }
+
+        # Add the task to the context
+        Assert (-not $currentContext.tasks.ContainsKey($taskKey)) ($msgs.error_duplicate_task_name -f $taskKey)
+        Write-Debug "Adding task [$taskKey)]"
+        $currentContext.tasks[$taskKey] = $newTask
+
+        if ($alias) {
+            $aliasKey = $alias.ToLower()
+            Assert (-not $currentContext.aliases.ContainsKey($aliasKey)) ($msgs.error_duplicate_alias_name -f $alias)
+            $currentContext.aliases[$aliasKey] = $newTask
+        }
+    }
+}
diff --git a/.build/psake/public/TaskSetup.ps1 b/.build/psake/public/TaskSetup.ps1
new file mode 100644
index 0000000..50da9f2
--- /dev/null
+++ b/.build/psake/public/TaskSetup.ps1
@@ -0,0 +1,102 @@
+function TaskSetup {
+    <#
+        .SYNOPSIS
+        Adds a scriptblock that will be executed before each task
+
+        .DESCRIPTION
+        This function will accept a scriptblock that will be executed before each task in the build script.
+
+        The scriptblock accepts an optional parameter which describes the Task being setup.
+
+        .PARAMETER setup
+        A scriptblock to execute
+
+        .EXAMPLE
+        A sample build script is shown below:
+
+        Task default -depends Test
+
+        Task Test -depends Compile, Clean {
+        }
+
+        Task Compile -depends Clean {
+        }
+
+        Task Clean {
+        }
+
+        TaskSetup {
+            "Running 'TaskSetup' for task $context.Peek().currentTaskName"
+        }
+
+        The script above produces the following output:
+
+        Running 'TaskSetup' for task Clean
+        Executing task, Clean...
+        Running 'TaskSetup' for task Compile
+        Executing task, Compile...
+        Running 'TaskSetup' for task Test
+        Executing task, Test...
+
+        Build Succeeded
+
+        .EXAMPLE
+        A sample build script showing access to the Task context is shown below:
+
+        Task default -depends Test
+
+        Task Test -depends Compile, Clean {
+        }
+
+        Task Compile -depends Clean {
+        }
+
+        Task Clean {
+        }
+
+        TaskSetup {
+            param($task)
+
+            "Running 'TaskSetup' for task $($task.Name)"
+        }
+
+        The script above produces the following output:
+
+        Running 'TaskSetup' for task Clean
+        Executing task, Clean...
+        Running 'TaskSetup' for task Compile
+        Executing task, Compile...
+        Running 'TaskSetup' for task Test
+        Executing task, Test...
+
+        Build Succeeded
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskTearDown
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [scriptblock]$setup
+    )
+
+    $psake.context.Peek().taskSetupScriptBlock = $setup
+}
diff --git a/.build/psake/public/TaskTearDown.ps1 b/.build/psake/public/TaskTearDown.ps1
new file mode 100644
index 0000000..b45a589
--- /dev/null
+++ b/.build/psake/public/TaskTearDown.ps1
@@ -0,0 +1,107 @@
+
+function TaskTearDown {
+    <#
+        .SYNOPSIS
+        Adds a scriptblock to the build that will be executed after each task
+
+        .DESCRIPTION
+        This function will accept a scriptblock that will be executed after each task in the build script.
+
+        The scriptblock accepts an optional parameter which describes the Task being torn down.
+
+        .PARAMETER teardown
+        A scriptblock to execute
+
+        .EXAMPLE
+        A sample build script is shown below:
+
+        Task default -depends Test
+
+        Task Test -depends Compile, Clean {
+        }
+
+        Task Compile -depends Clean {
+        }
+
+        Task Clean {
+        }
+
+        TaskTearDown {
+            "Running 'TaskTearDown' for task $context.Peek().currentTaskName"
+        }
+
+        The script above produces the following output:
+
+        Executing task, Clean...
+        Running 'TaskTearDown' for task Clean
+        Executing task, Compile...
+        Running 'TaskTearDown' for task Compile
+        Executing task, Test...
+        Running 'TaskTearDown' for task Test
+
+        Build Succeeded
+
+        .EXAMPLE
+        A sample build script demonstrating access to the task context is shown below:
+
+        Task default -depends Test
+
+        Task Test -depends Compile, Clean {
+        }
+
+        Task Compile -depends Clean {
+        }
+
+        Task Clean {
+        }
+
+        TaskTearDown {
+            param($task)
+
+            if ($task.Success) {
+                "Running 'TaskTearDown' for task $($task.Name) - success!"
+            } else {
+                "Running 'TaskTearDown' for task $($task.Name) - failed: $($task.ErrorMessage)"
+            }
+        }
+
+        The script above produces the following output:
+
+        Executing task, Clean...
+        Running 'TaskTearDown' for task Clean - success!
+        Executing task, Compile...
+        Running 'TaskTearDown' for task Compile - success!
+        Executing task, Test...
+        Running 'TaskTearDown' for task Test - success!
+
+        Build Succeeded
+
+        .LINK
+        Assert
+        .LINK
+        Exec
+        .LINK
+        FormatTaskName
+        .LINK
+        Framework
+        .LINK
+        Get-PSakeScriptTasks
+        .LINK
+        Include
+        .LINK
+        Invoke-psake
+        .LINK
+        Properties
+        .LINK
+        Task
+        .LINK
+        TaskSetup
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory = $true)]
+        [scriptblock]$teardown
+    )
+
+    $psake.context.Peek().taskTearDownScriptBlock = $teardown
+}
diff --git a/.build/psake/readme.md b/.build/psake/readme.md
new file mode 100644
index 0000000..42222b7
--- /dev/null
+++ b/.build/psake/readme.md
@@ -0,0 +1,13 @@
+# Psake Build Automation
+
+psake is a build automation tool written in PowerShell. It avoids the angle-bracket tax associated with executable XML by leveraging the PowerShell syntax in your build scripts. psake has a syntax inspired by rake (aka make in Ruby) and bake (aka make in Boo), but is easier to script because it leverages your existing command-line knowledge.
+
+psake is pronounced sake – as in Japanese rice wine. It does NOT rhyme with make, bake, or rake.
+
+## Documentation
+
+The docs for the latest version of Psake are at: https://psake.readthedocs.io/en/latest/. There is also some good info on the [README.md](https://github.com/psake/psake#readme).
+
+## Upgrading
+
+Simply download the [latest release of Psake](https://github.com/psake/psake/releases) and drop the files from the `/src` folder it into this directory to upgrade. In general, we don't use very much advanced functionality and the main file names remain stable from one release to the next.
\ No newline at end of file
diff --git a/.rat-excludes b/.rat-excludes
index 43cd1fe..1975068 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -23,6 +23,7 @@ svn-release/*
 LuceneResourcesWikiPage\.html
 
 # Covered under a different license
+psake/*
 KStemData\d+\.cs
 Snowball/*
 Egothor.Stemmer/*
diff --git a/LICENSE.txt b/LICENSE.txt
index 2e2958a..4acef96 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,4 +1,4 @@
-
+
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -744,8 +744,7 @@ SOFTWARE.
 
 ---
 
-The code in build/psake.cmd, build/psake.ps1, build/psake.psd1, and build/psake.psm1
-falls under the following license:
+The code in build/psake/ falls under the following license:
 
 psake
 Copyright (c) 2012-13 James Kovacs, Damian Hickey and Contributors
diff --git a/Lucene.Net.sln b/Lucene.Net.sln
index 6d150d0..c80f1ab 100644
--- a/Lucene.Net.sln
+++ b/Lucene.Net.sln
@@ -46,6 +46,55 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".build", ".build", "{4016BD
 		TestTargetFramework.props = TestTargetFramework.props
 	EndProjectSection
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "psake", "psake", "{4BFE738F-3D99-4408-85D4-E882737F9CEC}"
+	ProjectSection(SolutionItems) = preProject
+		.build\psake\psake = .build\psake\psake
+		.build\psake\psake-config.ps1 = .build\psake\psake-config.ps1
+		.build\psake\psake.cmd = .build\psake\psake.cmd
+		.build\psake\psake.ps1 = .build\psake\psake.ps1
+		.build\psake\psake.psd1 = .build\psake\psake.psd1
+		.build\psake\psake.psm1 = .build\psake\psake.psm1
+		.build\psake\readme.md = .build\psake\readme.md
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "public", "public", "{DB6B3C48-B1B1-4977-9FB0-333ED71E84E1}"
+	ProjectSection(SolutionItems) = preProject
+		.build\psake\public\Assert.ps1 = .build\psake\public\Assert.ps1
+		.build\psake\public\BuildSetup.ps1 = .build\psake\public\BuildSetup.ps1
+		.build\psake\public\BuildTearDown.ps1 = .build\psake\public\BuildTearDown.ps1
+		.build\psake\public\Exec.ps1 = .build\psake\public\Exec.ps1
+		.build\psake\public\FormatTaskName.ps1 = .build\psake\public\FormatTaskName.ps1
+		.build\psake\public\Framework.ps1 = .build\psake\public\Framework.ps1
+		.build\psake\public\Get-PSakeScriptTasks.ps1 = .build\psake\public\Get-PSakeScriptTasks.ps1
+		.build\psake\public\Include.ps1 = .build\psake\public\Include.ps1
+		.build\psake\public\Invoke-psake.ps1 = .build\psake\public\Invoke-psake.ps1
+		.build\psake\public\Invoke-Task.ps1 = .build\psake\public\Invoke-Task.ps1
+		.build\psake\public\Properties.ps1 = .build\psake\public\Properties.ps1
+		.build\psake\public\Task.ps1 = .build\psake\public\Task.ps1
+		.build\psake\public\TaskSetup.ps1 = .build\psake\public\TaskSetup.ps1
+		.build\psake\public\TaskTearDown.ps1 = .build\psake\public\TaskTearDown.ps1
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "private", "private", "{BC910C84-EF7C-4F69-AA76-47C0EC06D809}"
+	ProjectSection(SolutionItems) = preProject
+		.build\psake\private\CleanupEnvironment.ps1 = .build\psake\private\CleanupEnvironment.ps1
+		.build\psake\private\ConfigureBuildEnvironment.ps1 = .build\psake\private\ConfigureBuildEnvironment.ps1
+		.build\psake\private\CreateConfigurationForNewContext.ps1 = .build\psake\private\CreateConfigurationForNewContext.ps1
+		.build\psake\private\ExecuteInBuildFileScope.ps1 = .build\psake\private\ExecuteInBuildFileScope.ps1
+		.build\psake\private\FormatErrorMessage.ps1 = .build\psake\private\FormatErrorMessage.ps1
+		.build\psake\private\Get-DefaultBuildFile.ps1 = .build\psake\private\Get-DefaultBuildFile.ps1
+		.build\psake\private\GetCurrentConfigurationOrDefault.ps1 = .build\psake\private\GetCurrentConfigurationOrDefault.ps1
+		.build\psake\private\GetTasksFromContext.ps1 = .build\psake\private\GetTasksFromContext.ps1
+		.build\psake\private\LoadConfiguration.ps1 = .build\psake\private\LoadConfiguration.ps1
+		.build\psake\private\LoadModules.ps1 = .build\psake\private\LoadModules.ps1
+		.build\psake\private\ResolveError.ps1 = .build\psake\private\ResolveError.ps1
+		.build\psake\private\SelectObjectWithDefault.ps1 = .build\psake\private\SelectObjectWithDefault.ps1
+		.build\psake\private\Test-ModuleVersion.ps1 = .build\psake\private\Test-ModuleVersion.ps1
+		.build\psake\private\WriteColoredOutput.ps1 = .build\psake\private\WriteColoredOutput.ps1
+		.build\psake\private\WriteDocumentation.ps1 = .build\psake\private\WriteDocumentation.ps1
+		.build\psake\private\WriteTaskTimeSummary.ps1 = .build\psake\private\WriteTaskTimeSummary.ps1
+	EndProjectSection
+EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{4DF7EACE-2B25-43F6-B558-8520BF20BD76}"
 	ProjectSection(SolutionItems) = preProject
 		src\dotnet\tools\Directory.Build.props = src\dotnet\tools\Directory.Build.props
@@ -507,6 +556,9 @@ Global
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{05CE3A39-40D4-452D-AFE0-E57E536A08C6} = {4016BDAB-6C33-4D1E-9439-57B416EA45D5}
+		{4BFE738F-3D99-4408-85D4-E882737F9CEC} = {4016BDAB-6C33-4D1E-9439-57B416EA45D5}
+		{DB6B3C48-B1B1-4977-9FB0-333ED71E84E1} = {4BFE738F-3D99-4408-85D4-E882737F9CEC}
+		{BC910C84-EF7C-4F69-AA76-47C0EC06D809} = {4BFE738F-3D99-4408-85D4-E882737F9CEC}
 		{4DF7EACE-2B25-43F6-B558-8520BF20BD76} = {8CA61D33-3590-4024-A304-7B1F75B50653}
 		{EFB2E31A-5917-49D5-A808-FE5061A550B4} = {8CA61D33-3590-4024-A304-7B1F75B50653}
 		{119BBACD-D4DB-4E3B-922F-3DA83E0B29E2} = {4DF7EACE-2B25-43F6-B558-8520BF20BD76}
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index b0729ad..d576f31 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -129,7 +129,7 @@ stages:
         version: '$(BuildSDKVersion)'
 
     - pwsh: |
-        Import-Module "$(BuildDirectory)/psake.psm1"
+        Import-Module "$(BuildDirectory)/psake/psake.psm1"
         $generateBuildBat = $env:ISRELEASE
         $primaryCommand = if ($env:RUNPACK -ne 'false') { 'Pack' } else { 'Compile' }
         $parameters = @{}
diff --git a/build.bat b/build.bat
index 19581c5..856cce7 100644
--- a/build.bat
+++ b/build.bat
@@ -129,6 +129,6 @@ if "!runtests!"=="true" (
 	set tasks="Default,Test"
 )
 
-powershell -ExecutionPolicy Bypass -Command "& { Import-Module .\.build\psake.psm1; Invoke-Psake .\.build\runbuild.ps1 %tasks% -properties @{configuration='%configuration%';maximumParalellJobs=%maximumParallelJobs%} -parameters @{ packageVersion='%PackageVersion%';version='%version%' } }"
+powershell -ExecutionPolicy Bypass -Command "& { Import-Module .\.build\psake\psake.psm1; Invoke-Psake .\.build\runbuild.ps1 %tasks% -properties @{configuration='%configuration%';maximumParalellJobs=%maximumParallelJobs%} -parameters @{ packageVersion='%PackageVersion%';version='%version%' } }"
 
 endlocal

[lucenenet] 01/15: Moved build directory to .build, release to _artifacts, renamed build.ps1 > runbuild.ps1

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 11e4c06a15dd31db2c46ed6d057ed9a19be75351
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Fri Jan 7 08:37:15 2022 +0700

    Moved build directory to .build, release to _artifacts, renamed build.ps1 > runbuild.ps1
---
 {build => .build}/TestReferences.Common.targets    |  0
 .../azure-templates/publish-nuget-packages.yml     |  0
 .../azure-templates/publish-test-binaries.yml      |  0
 .../publish-test-results-for-test-projects.yml     |  0
 .../azure-templates/publish-test-results.yml       |  0
 .../azure-templates/run-tests-on-os.yml            |  0
 .../show-all-environment-variables.yml             |  0
 .../azure-templates/show-all-files.yml             |  0
 .../dependencies.props                             |  0
 {build => .build}/dotnet-install.ps1               |  0
 build/NuGet.props => .build/nuget.props            |  0
 {build => .build}/psake.cmd                        |  0
 {build => .build}/psake.ps1                        |  0
 {build => .build}/psake.psd1                       |  0
 {build => .build}/psake.psm1                       |  0
 build/Release.targets => .build/release.targets    |  2 +-
 build/build.ps1 => .build/runbuild.ps1             | 20 ++++-----
 .github/workflows/Generate-TestWorkflows.ps1       |  4 +-
 .gitignore                                         |  3 +-
 .rat-excludes                                      |  2 +
 Directory.Build.props                              |  2 +-
 Directory.Build.targets                            |  4 +-
 Lucene.Net.sln                                     | 26 ++++++------
 README.md                                          |  6 +--
 azure-pipelines.yml                                | 48 +++++++++++-----------
 build.bat                                          |  2 +-
 .../Lucene.Net.Analysis.Common.csproj              |  4 +-
 .../Lucene.Net.Analysis.Kuromoji.csproj            |  4 +-
 .../Lucene.Net.Analysis.Morfologik.csproj          |  4 +-
 .../Lucene.Net.Analysis.OpenNLP.csproj             |  4 +-
 .../Lucene.Net.Analysis.Phonetic.csproj            |  4 +-
 .../Lucene.Net.Analysis.SmartCn.csproj             |  4 +-
 .../Lucene.Net.Analysis.Stempel.csproj             |  4 +-
 .../Lucene.Net.Benchmark.csproj                    |  4 +-
 .../Lucene.Net.Classification.csproj               |  4 +-
 src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj     |  4 +-
 .../Lucene.Net.Expressions.csproj                  |  4 +-
 src/Lucene.Net.Facet/Lucene.Net.Facet.csproj       |  4 +-
 src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj |  4 +-
 .../Lucene.Net.Highlighter.csproj                  |  4 +-
 src/Lucene.Net.Join/Lucene.Net.Join.csproj         |  4 +-
 src/Lucene.Net.Memory/Lucene.Net.Memory.csproj     |  4 +-
 src/Lucene.Net.Misc/Lucene.Net.Misc.csproj         |  4 +-
 src/Lucene.Net.Queries/Lucene.Net.Queries.csproj   |  4 +-
 .../Lucene.Net.QueryParser.csproj                  |  4 +-
 .../Lucene.Net.Replicator.csproj                   |  4 +-
 src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj   |  4 +-
 src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj   |  4 +-
 src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj   |  4 +-
 .../Lucene.Net.TestFramework.csproj                |  4 +-
 .../Lucene.Net.Tests.AllProjects.csproj            |  2 +-
 .../Lucene.Net.Tests.Analysis.Common.csproj        |  2 +-
 .../Lucene.Net.Tests.Analysis.Kuromoji.csproj      |  2 +-
 .../Lucene.Net.Tests.Analysis.Morfologik.csproj    |  2 +-
 .../Lucene.Net.Tests.Analysis.OpenNLP.csproj       |  2 +-
 .../Lucene.Net.Tests.Analysis.Phonetic.csproj      |  2 +-
 .../Lucene.Net.Tests.Analysis.SmartCn.csproj       |  2 +-
 .../Lucene.Net.Tests.Analysis.Stempel.csproj       |  2 +-
 .../Lucene.Net.Tests.Benchmark.csproj              |  2 +-
 .../Lucene.Net.Tests.Classification.csproj         |  2 +-
 .../Lucene.Net.Tests.Codecs.csproj                 |  2 +-
 .../Lucene.Net.Tests.Demo.csproj                   |  2 +-
 .../Lucene.Net.Tests.Expressions.csproj            |  2 +-
 .../Lucene.Net.Tests.Facet.csproj                  |  2 +-
 .../Lucene.Net.Tests.Grouping.csproj               |  2 +-
 .../Lucene.Net.Tests.Highlighter.csproj            |  2 +-
 .../Lucene.Net.Tests.Join.csproj                   |  2 +-
 .../Lucene.Net.Tests.Memory.csproj                 |  2 +-
 .../Lucene.Net.Tests.Misc.csproj                   |  2 +-
 .../Lucene.Net.Tests.Queries.csproj                |  2 +-
 .../Lucene.Net.Tests.QueryParser.csproj            |  2 +-
 .../Lucene.Net.Tests.Replicator.csproj             |  2 +-
 .../Lucene.Net.Tests.Sandbox.csproj                |  2 +-
 .../Lucene.Net.Tests.Spatial.csproj                |  2 +-
 .../Lucene.Net.Tests.Suggest.csproj                |  2 +-
 ....Tests.TestFramework.DependencyInjection.csproj |  2 +-
 .../Lucene.Net.Tests.TestFramework.csproj          |  2 +-
 .../Lucene.Net.Tests._A-D.csproj                   |  2 +-
 .../Lucene.Net.Tests._E-I.csproj                   |  2 +-
 .../Lucene.Net.Tests._I-J.csproj                   |  2 +-
 .../Lucene.Net.Tests._J-S.csproj                   |  2 +-
 .../Lucene.Net.Tests._T-Z.csproj                   |  2 +-
 src/Lucene.Net/Lucene.Net.csproj                   |  2 +-
 src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj    |  4 +-
 .../Lucene.Net.Replicator.AspNetCore.csproj        |  2 +-
 .../Lucene.Net.Tests.CodeAnalysis.csproj           |  2 +-
 .../Lucene.Net.Tests.ICU.csproj                    |  2 +-
 .../Lucene.Net.Tests.Cli.csproj                    |  2 +-
 src/dotnet/tools/lucene-cli/lucene-cli.csproj      |  2 +-
 89 files changed, 149 insertions(+), 146 deletions(-)

diff --git a/build/TestReferences.Common.targets b/.build/TestReferences.Common.targets
similarity index 100%
rename from build/TestReferences.Common.targets
rename to .build/TestReferences.Common.targets
diff --git a/build/azure-templates/publish-nuget-packages.yml b/.build/azure-templates/publish-nuget-packages.yml
similarity index 100%
rename from build/azure-templates/publish-nuget-packages.yml
rename to .build/azure-templates/publish-nuget-packages.yml
diff --git a/build/azure-templates/publish-test-binaries.yml b/.build/azure-templates/publish-test-binaries.yml
similarity index 100%
rename from build/azure-templates/publish-test-binaries.yml
rename to .build/azure-templates/publish-test-binaries.yml
diff --git a/build/azure-templates/publish-test-results-for-test-projects.yml b/.build/azure-templates/publish-test-results-for-test-projects.yml
similarity index 100%
rename from build/azure-templates/publish-test-results-for-test-projects.yml
rename to .build/azure-templates/publish-test-results-for-test-projects.yml
diff --git a/build/azure-templates/publish-test-results.yml b/.build/azure-templates/publish-test-results.yml
similarity index 100%
rename from build/azure-templates/publish-test-results.yml
rename to .build/azure-templates/publish-test-results.yml
diff --git a/build/azure-templates/run-tests-on-os.yml b/.build/azure-templates/run-tests-on-os.yml
similarity index 100%
rename from build/azure-templates/run-tests-on-os.yml
rename to .build/azure-templates/run-tests-on-os.yml
diff --git a/build/azure-templates/show-all-environment-variables.yml b/.build/azure-templates/show-all-environment-variables.yml
similarity index 100%
rename from build/azure-templates/show-all-environment-variables.yml
rename to .build/azure-templates/show-all-environment-variables.yml
diff --git a/build/azure-templates/show-all-files.yml b/.build/azure-templates/show-all-files.yml
similarity index 100%
rename from build/azure-templates/show-all-files.yml
rename to .build/azure-templates/show-all-files.yml
diff --git a/build/Dependencies.props b/.build/dependencies.props
similarity index 100%
rename from build/Dependencies.props
rename to .build/dependencies.props
diff --git a/build/dotnet-install.ps1 b/.build/dotnet-install.ps1
similarity index 100%
rename from build/dotnet-install.ps1
rename to .build/dotnet-install.ps1
diff --git a/build/NuGet.props b/.build/nuget.props
similarity index 100%
rename from build/NuGet.props
rename to .build/nuget.props
diff --git a/build/psake.cmd b/.build/psake.cmd
similarity index 100%
rename from build/psake.cmd
rename to .build/psake.cmd
diff --git a/build/psake.ps1 b/.build/psake.ps1
similarity index 100%
rename from build/psake.ps1
rename to .build/psake.ps1
diff --git a/build/psake.psd1 b/.build/psake.psd1
similarity index 100%
rename from build/psake.psd1
rename to .build/psake.psd1
diff --git a/build/psake.psm1 b/.build/psake.psm1
similarity index 100%
rename from build/psake.psm1
rename to .build/psake.psm1
diff --git a/build/Release.targets b/.build/release.targets
similarity index 99%
rename from build/Release.targets
rename to .build/release.targets
index 309af35..9505492 100644
--- a/build/Release.targets
+++ b/.build/release.targets
@@ -1,4 +1,4 @@
-<!--
+<!--
 
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
diff --git a/build/build.ps1 b/.build/runbuild.ps1
similarity index 97%
rename from build/build.ps1
rename to .build/runbuild.ps1
index 4f0bc33..1f3c87f 100644
--- a/build/build.ps1
+++ b/.build/runbuild.ps1
@@ -19,18 +19,18 @@
 
 properties {
     [string]$base_directory   = Resolve-Path "../."
-    [string]$release_directory  = "$base_directory/release"
+    [string]$artifactsDirectory  = "$base_directory/_artifacts"
     [string]$source_directory = "$base_directory"
     [string]$tools_directory  = "$base_directory/lib"
-    [string]$nuget_package_directory = "$release_directory/NuGetPackages"
-    [string]$test_results_directory = "$release_directory/TestResults"
-    [string]$publish_directory = "$release_directory/Publish"
+    [string]$nuget_package_directory = "$artifactsDirectory/NuGetPackages"
+    [string]$test_results_directory = "$artifactsDirectory/TestResults"
+    [string]$publish_directory = "$artifactsDirectory/Publish"
     [string]$solutionFile = "$base_directory/Lucene.Net.sln"
     [string]$sdkPath = "$env:programfiles/dotnet/sdk"
     [string]$sdkVersion = "6.0.100"
     [bool]$skipSdkInstallation = $false
     [string]$globalJsonFile = "$base_directory/global.json"
-    [string]$versionPropsFile = "$base_directory/Version.props"
+    [string]$versionPropsFile = "$base_directory/version.props"
     [string]$build_bat = "$base_directory/build.bat"
     [string]$luceneReadmeFile = "$base_directory/src/Lucene.Net/readme-nuget.md"
     [string]$luceneCLIReadmeFile = "$base_directory/src/dotnet/tools/lucene-cli/docs/index.md"
@@ -67,7 +67,7 @@ task default -depends Pack
 task Clean -description "This task cleans up the build directory" {
     Write-Host "##teamcity[progressMessage 'Cleaning']"
     Write-Host "##vso[task.setprogress]'Cleaning'"
-    Remove-Item $release_directory -Force -Recurse -ErrorAction SilentlyContinue
+    Remove-Item $artifactsDirectory -Force -Recurse -ErrorAction SilentlyContinue
     Get-ChildItem $base_directory -Include *.bak -Recurse | foreach ($_) {Remove-Item $_.FullName}
 }
 
@@ -85,7 +85,7 @@ task InstallSDK -description "This task makes sure the correct SDK version is in
         $installed = Is-Sdk-Version-Installed $sdkVersion
         if (!$installed) {
             Write-Host "Requires SDK version $sdkVersion, installing..." -ForegroundColor Red
-            Invoke-Expression "$base_directory\build\dotnet-install.ps1 -Version $sdkVersion"
+            Invoke-Expression "$base_directory\.build\dotnet-install.ps1 -Version $sdkVersion"
         }
 
         # Safety check - this should never happen
@@ -106,7 +106,7 @@ task Init -depends InstallSDK, UpdateLocalSDKVersion -description "This task mak
     & dotnet.exe --version
     & dotnet.exe --info
     Write-Host "Base Directory: $base_directory"
-    Write-Host "Release Directory: $release_directory"
+    Write-Host "Release Directory: $artifactsDirectory"
     Write-Host "Source Directory: $source_directory"
     Write-Host "Tools Directory: $tools_directory"
     Write-Host "NuGet Package Directory: $nuget_package_directory"
@@ -120,7 +120,7 @@ task Init -depends InstallSDK, UpdateLocalSDKVersion -description "This task mak
     Write-Host "MaximumParallelJobs: $($maximumParalellJobs.ToString())"
     Write-Host "Powershell Version: $($PSVersionTable.PSVersion)"
 
-    Ensure-Directory-Exists "$release_directory"
+    Ensure-Directory-Exists "$artifactsDirectory"
 }
 
 task Restore -description "This task restores the dependencies" {
@@ -672,7 +672,7 @@ set tasks=""Default""
 if ""!runtests!""==""true"" (
     set tasks=""Default,Test""
 )
-powershell -ExecutionPolicy Bypass -Command ""& { Import-Module .\build\psake.psm1; Invoke-Psake .\build\build.ps1 -Task %tasks% -properties @{prepareForBuild='false';backup_files='false';maximumParalellJobs=%maximumParallelJobs%} }""
+powershell -ExecutionPolicy Bypass -Command ""& { Import-Module .\.build\psake.psm1; Invoke-Psake .\.build\runbuild.ps1 -Task %tasks% -properties @{prepareForBuild='false';backup_files='false';maximumParalellJobs=%maximumParallelJobs%} }""
 endlocal
 "
     $dir = [System.IO.Path]::GetDirectoryName($file)
diff --git a/.github/workflows/Generate-TestWorkflows.ps1 b/.github/workflows/Generate-TestWorkflows.ps1
index 164aae2..6626688 100644
--- a/.github/workflows/Generate-TestWorkflows.ps1
+++ b/.github/workflows/Generate-TestWorkflows.ps1
@@ -221,8 +221,8 @@ on:
   pull_request:
     paths:
     - '$projectRelativeDirectory/**/*'
-    - 'build/Dependencies.props'
-    - 'build/TestReferences.Common.*'
+    - '.build/dependencies.props'
+    - '.build/TestReferences.Common.*'
     - 'TestTargetFrameworks.*'
     - '*.sln'$directoryBuildPaths
     # Dependencies$dependencyPaths
diff --git a/.gitignore b/.gitignore
index 0cd17bf..bbc6a49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-# this is the git pattern ignore file for the project.
+# this is the git pattern ignore file for the project.
 # Git can be used with svn http://code.google.com/p/msysgit/
 bin
 Bin
@@ -40,6 +40,7 @@ test-files/analysis/data/
 [Nn]u[Gg]et[Pp]ackages/
 out.dot
 release/
+_artifacts/
 
 # NuGet v3's project.json files produces more ignoreable files
 *.nuget.props
diff --git a/.rat-excludes b/.rat-excludes
index 11a82bf..43cd1fe 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -9,6 +9,8 @@
 lib/*
 obj/*
 bin/*
+_artifacts/*
+_site/*
 
 # Exclude SVN release folders
 svn-dev/*
diff --git a/Directory.Build.props b/Directory.Build.props
index 92f0a4c..4cda9db 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -85,5 +85,5 @@
       an IDE or from the commmand line, the version is always what is 
       in Version.props, if it exists and the PrepareForBuild argument 
       passed into build.ps1 is 'false'. -->
-  <Import Project="Version.props" Condition="Exists('Version.props')" />
+  <Import Project="version.props" Condition="Exists('version.props')" />
 </Project>
\ No newline at end of file
diff --git a/Directory.Build.targets b/Directory.Build.targets
index 82257b9..79b4b8d 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -20,7 +20,7 @@
 -->
 <Project>
 
-  <Import Project="$(SolutionDir)build/Dependencies.props" />
+  <Import Project="$(SolutionDir).build/dependencies.props" />
 
   <!-- Features in .NET 5.x and .NET 6.x only -->
   <PropertyGroup Condition=" $(TargetFramework.StartsWith('net5.')) Or $(TargetFramework.StartsWith('net6.')) ">
@@ -152,6 +152,6 @@
     <PackageReference Include="Microsoft.SourceLink.GitHub" Version="$(MicrosoftSourceLinkGitHubPackageReferenceVersion)" PrivateAssets="All"/>
   </ItemGroup>
 
-  <Import Project="build\Release.targets" Condition="Exists('build\Release.targets')" />
+  <Import Project=".build\release.targets" Condition="Exists('.build\release.targets')" />
 
 </Project>
\ No newline at end of file
diff --git a/Lucene.Net.sln b/Lucene.Net.sln
index cefbf89..6d150d0 100644
--- a/Lucene.Net.sln
+++ b/Lucene.Net.sln
@@ -20,13 +20,13 @@ VisualStudioVersion = 16.0.29806.167
 MinimumVisualStudioVersion = 15.0.26730.8
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "azure-templates", "azure-templates", "{05CE3A39-40D4-452D-AFE0-E57E536A08C6}"
 	ProjectSection(SolutionItems) = preProject
-		build\azure-templates\publish-nuget-packages.yml = build\azure-templates\publish-nuget-packages.yml
-		build\azure-templates\publish-test-binaries.yml = build\azure-templates\publish-test-binaries.yml
-		build\azure-templates\publish-test-results-for-test-projects.yml = build\azure-templates\publish-test-results-for-test-projects.yml
-		build\azure-templates\publish-test-results.yml = build\azure-templates\publish-test-results.yml
-		build\azure-templates\run-tests-on-os.yml = build\azure-templates\run-tests-on-os.yml
-		build\azure-templates\show-all-environment-variables.yml = build\azure-templates\show-all-environment-variables.yml
-		build\azure-templates\show-all-files.yml = build\azure-templates\show-all-files.yml
+		.build\azure-templates\publish-nuget-packages.yml = .build\azure-templates\publish-nuget-packages.yml
+		.build\azure-templates\publish-test-binaries.yml = .build\azure-templates\publish-test-binaries.yml
+		.build\azure-templates\publish-test-results-for-test-projects.yml = .build\azure-templates\publish-test-results-for-test-projects.yml
+		.build\azure-templates\publish-test-results.yml = .build\azure-templates\publish-test-results.yml
+		.build\azure-templates\run-tests-on-os.yml = .build\azure-templates\run-tests-on-os.yml
+		.build\azure-templates\show-all-environment-variables.yml = .build\azure-templates\show-all-environment-variables.yml
+		.build\azure-templates\show-all-files.yml = .build\azure-templates\show-all-files.yml
 	EndProjectSection
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{8CA61D33-3590-4024-A304-7B1F75B50653}"
@@ -34,15 +34,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{8CA61D
 		src\dotnet\Directory.Build.props = src\dotnet\Directory.Build.props
 	EndProjectSection
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{4016BDAB-6C33-4D1E-9439-57B416EA45D5}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".build", ".build", "{4016BDAB-6C33-4D1E-9439-57B416EA45D5}"
 	ProjectSection(SolutionItems) = preProject
 		azure-pipelines.yml = azure-pipelines.yml
 		build.bat = build.bat
-		build\build.ps1 = build\build.ps1
-		build\Dependencies.props = build\Dependencies.props
-		build\NuGet.props = build\NuGet.props
-		build\Release.targets = build\Release.targets
-		build\TestReferences.Common.targets = build\TestReferences.Common.targets
+		.build\runbuild.ps1 = .build\runbuild.ps1
+		.build\dependencies.props = .build\dependencies.props
+		.build\nuget.props = .build\nuget.props
+		.build\release.targets = .build\release.targets
+		.build\TestReferences.Common.targets = .build\TestReferences.Common.targets
 		TestTargetFramework.props = TestTargetFramework.props
 	EndProjectSection
 EndProject
diff --git a/README.md b/README.md
index 7136aef..93a2b11 100644
--- a/README.md
+++ b/README.md
@@ -237,7 +237,7 @@ For example the following command creates a Release build with NuGet package ver
 
 In the above example we are using "ci" in the package version to indicate this is not a publically released beta version but rather the ouput of a continuous integration build from master which occured after beta00014 but before beta00015 was released.  
 
-NuGet packages are output by the build to the `/release/NuGetPackages/` directory. Test results (if applicable) are output to the `/release/TestResults/` directory.
+NuGet packages are output by the build to the `/_artifacts/NuGetPackages/` directory. Test results (if applicable) are output to the `/_artifacts/TestResults/` directory.
 
 You can setup Visual Studio to read the NuGet packages like any NuGet feed by following these steps:
 
@@ -245,7 +245,7 @@ You can setup Visual Studio to read the NuGet packages like any NuGet feed by fo
 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.
+5. Click the `...` button next to the Source field, and choose the `/src/_artifacts/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.
@@ -262,7 +262,7 @@ Then all you need to do is choose the `Lucene.Net Local Packages` feed from the
 #### Execution
 
 1. Open `Lucene.Net.sln` in Visual Studio.
-2. Choose the target framework to test by opening `build/TestTargetFramework.props` and uncommenting the corresponding `<TargetFramework>` (and commenting all others).
+2. Choose the target framework to test by opening `.build/TestTargetFramework.props` and uncommenting the corresponding `<TargetFramework>` (and commenting all others).
 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.
 
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index c2704f7..b0729ad 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -85,7 +85,7 @@ variables:
 - name: TestSettingsFileName
   value: 'lucene.testsettings.json'
 - name: BuildDirectory # Where the build scripts and configs are
-  value: '$(System.DefaultWorkingDirectory)/build'
+  value: '$(System.DefaultWorkingDirectory)/.build'
 - name: PublishDirectory # Test binaries directory
   value: '$(Build.ArtifactStagingDirectory)/$(BinaryArtifactName)'
 - name: NuGetArtifactDirectory # NuGet binaries directory
@@ -145,11 +145,11 @@ stages:
         if ($env:RunTests -ne 'false') {
             [string[]]$tasks = $primaryCommand,'Publish'
         }
-        Invoke-psake $(BuildDirectory)/build.ps1 -Task $tasks -properties $properties -parameters $parameters
+        Invoke-psake $(BuildDirectory)/runbuild.ps1 -Task $tasks -properties $properties -parameters $parameters
         exit !($psake.build_success)
       displayName: 'PSake Build, Pack, and Publish'
 
-    #- template: 'build/azure-templates/show-all-environment-variables.yml' # Uncomment for debugging
+    #- template: '.build/azure-templates/show-all-environment-variables.yml' # Uncomment for debugging
         
     - pwsh: |
         $dir = '$(Build.ArtifactStagingDirectory)/$(VersionArtifactName)'
@@ -236,35 +236,35 @@ stages:
         publishLocation: 'pipeline'
       condition: and(succeeded(), ne(variables['ArtifactFeedID'], ''))
 
-    - template: 'build/azure-templates/publish-test-binaries.yml'
+    - template: '.build/azure-templates/publish-test-binaries.yml'
       parameters:
         publishDirectory: $(PublishTempDirectory)
         framework: 'net6.0'
         binaryArtifactName: '$(BinaryArtifactName)'
         testSettingsFilePath: '$(Build.ArtifactStagingDirectory)/$(TestSettingsFileName)'
 
-    - template: 'build/azure-templates/publish-test-binaries.yml'
+    - template: '.build/azure-templates/publish-test-binaries.yml'
       parameters:
         publishDirectory: $(PublishTempDirectory)
         framework: 'net5.0'
         binaryArtifactName: '$(BinaryArtifactName)'
         testSettingsFilePath: '$(Build.ArtifactStagingDirectory)/$(TestSettingsFileName)'
 
-    - template: 'build/azure-templates/publish-test-binaries.yml'
+    - template: '.build/azure-templates/publish-test-binaries.yml'
       parameters:
         publishDirectory: $(PublishTempDirectory)
         framework: 'netcoreapp3.1'
         binaryArtifactName: '$(BinaryArtifactName)'
         testSettingsFilePath: '$(Build.ArtifactStagingDirectory)/$(TestSettingsFileName)'
 
-    - template: 'build/azure-templates/publish-test-binaries.yml'
+    - template: '.build/azure-templates/publish-test-binaries.yml'
       parameters:
         publishDirectory: $(PublishTempDirectory)
         framework: 'net461'
         binaryArtifactName: '$(BinaryArtifactName)'
         testSettingsFilePath: '$(Build.ArtifactStagingDirectory)/$(TestSettingsFileName)'
 
-    - template: 'build/azure-templates/publish-test-binaries.yml'
+    - template: '.build/azure-templates/publish-test-binaries.yml'
       parameters:
         publishDirectory: $(PublishTempDirectory)
         framework: 'net48'
@@ -351,7 +351,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'net6.0'
@@ -385,7 +385,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'net6.0'
@@ -419,7 +419,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'net5.0'
@@ -453,7 +453,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'net5.0'
@@ -487,7 +487,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'netcoreapp3.1'
@@ -521,7 +521,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'netcoreapp3.1'
@@ -545,7 +545,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'net461'
@@ -569,7 +569,7 @@ stages:
     pool:
       vmImage: $(imageName)
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: $(osName)
         framework: 'net461'
@@ -586,7 +586,7 @@ stages:
     pool:
       vmImage: 'windows-2019'
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: 'Windows'
         framework: 'net48'
@@ -603,7 +603,7 @@ stages:
     pool:
       vmImage: 'windows-2019'
     steps:
-    - template: 'build/azure-templates/run-tests-on-os.yml'
+    - template: '.build/azure-templates/run-tests-on-os.yml'
       parameters:
         osName: 'Windows'
         framework: 'net48'
@@ -631,7 +631,7 @@ stages:
     - checkout: self # self represents the repo where the initial Pipelines YAML file was found
       fetchDepth: '1'  # the depth of commits to ask Git to fetch
 
-    - template: 'build/azure-templates/show-all-environment-variables.yml'
+    - template: '.build/azure-templates/show-all-environment-variables.yml'
 
     - task: DownloadPipelineArtifact@0
       displayName: 'Download Build Artifacts: $(VersionArtifactName)'
@@ -651,9 +651,9 @@ stages:
         Write-Host "##vso[task.setvariable variable=PackageVersion;]$version"
         Write-Host "##vso[build.updatebuildnumber]$version"
       displayName: 'Read PackageVersion from File to Build.BuildNumber'
-    - template: 'build/azure-templates/show-all-environment-variables.yml'
+    - template: '.build/azure-templates/show-all-environment-variables.yml'
 
-    - template: 'build/azure-templates/publish-nuget-packages.yml'
+    - template: '.build/azure-templates/publish-nuget-packages.yml'
       parameters:
         artifactFeedID: '$(ArtifactFeedID)'
         nugetArtifactName: '$(NuGetArtifactName)'
@@ -673,7 +673,7 @@ stages:
     - checkout: self # self represents the repo where the initial Pipelines YAML file was found
       fetchDepth: '1'  # the depth of commits to ask Git to fetch
 
-    - template: 'build/azure-templates/show-all-environment-variables.yml'
+    - template: '.build/azure-templates/show-all-environment-variables.yml'
 
 
     - task: 'DownloadPipelineArtifact@0'
@@ -689,7 +689,7 @@ stages:
         artifactName: '$(VersionArtifactName)'
         targetPath: '$(Build.ArtifactStagingDirectory)/$(VersionArtifactName)'
         
-    - template: 'build/azure-templates/show-all-files.yml' # Uncomment for debugging
+    - template: '.build/azure-templates/show-all-files.yml' # Uncomment for debugging
 
       # NOTE: We are setting Build.BuildNumber here to the NuGet package version to work around the limitation that
       # the version cannot be passed to the Index Sources & Publish Symbols task.
@@ -706,7 +706,7 @@ stages:
             Copy-Item -Path "$(Build.ArtifactStagingDirectory)/$(VersionArtifactName)/$file" -Destination "$(Build.SourcesDirectory)/$file" -Force -ErrorAction Continue
         }
       displayName: 'Update build.bat and Version.props to build only version $(PackageVersion)'
-    - template: 'build/azure-templates/show-all-environment-variables.yml'
+    - template: '.build/azure-templates/show-all-environment-variables.yml'
 
     - task: CopyFiles@2
       displayName: 'Copy Source Code Files to: $(Build.ArtifactStagingDirectory)/srctemp'
diff --git a/build.bat b/build.bat
index 4fb317e..19581c5 100644
--- a/build.bat
+++ b/build.bat
@@ -129,6 +129,6 @@ if "!runtests!"=="true" (
 	set tasks="Default,Test"
 )
 
-powershell -ExecutionPolicy Bypass -Command "& { Import-Module .\build\psake.psm1; Invoke-Psake .\build\build.ps1 %tasks% -properties @{configuration='%configuration%';maximumParalellJobs=%maximumParallelJobs%} -parameters @{ packageVersion='%PackageVersion%';version='%version%' } }"
+powershell -ExecutionPolicy Bypass -Command "& { Import-Module .\.build\psake.psm1; Invoke-Psake .\.build\runbuild.ps1 %tasks% -properties @{configuration='%configuration%';maximumParalellJobs=%maximumParallelJobs%} -parameters @{ packageVersion='%PackageVersion%';version='%version%' } }"
 
 endlocal
diff --git a/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj b/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj
index 338752a..d6e87bb 100644
--- a/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj
+++ b/src/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Common.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Analyzers for indexing content in different languages and domains for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-common/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
   
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj b/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj
index 56d40f4..90419eb 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj
+++ b/src/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Kuromoji.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Japanese Morphological Analyzer for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-kuromoji/Lucene.Net.Analysis.Ja.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj b/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj
index 39c8c38..f0a39c4 100644
--- a/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj
+++ b/src/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Analyzer for dictionary stemming, built-in Polish dictionary for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-morfologik/Lucene.Net.Analysis.Morfologik.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
   
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj b/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj
index 4923a99..a3e7a42 100644
--- a/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj
+++ b/src/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNLP.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>OpenNLP library integration for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-opennlp/Lucene.Net.Analysis.OpenNlp.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <!--<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>-->
diff --git a/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj b/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj
index 0000d0d..39506a6 100644
--- a/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj
+++ b/src/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Analyzer for indexing phonetic signatures (for sounds-alike search) for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-phonetic/Lucene.Net.Analysis.Phonetic.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj b/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj
index 1fa5f59..4f81991 100644
--- a/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj
+++ b/src/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.SmartCn.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Analyzer for indexing Chinese for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-smartcn/Lucene.Net.Analysis.Cn.Smart.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj b/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj
index a27a5a2..edfc360 100644
--- a/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj
+++ b/src/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Analyzer for indexing Polish for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>analysis-stempel/Lucene.Net.Analysis.Stempel.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj b/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj
index d7b933e..020308c 100644
--- a/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj
+++ b/src/Lucene.Net.Benchmark/Lucene.Net.Benchmark.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>System for benchmarking the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>benchmark/Lucene.Net.Benchmarks.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
   
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj b/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj
index 6a63956..999ed68 100644
--- a/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj
+++ b/src/Lucene.Net.Classification/Lucene.Net.Classification.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Classification module for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>classification/Lucene.Net.Classification.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj b/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj
index 7adea81..aa1451a 100644
--- a/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj
+++ b/src/Lucene.Net.Codecs/Lucene.Net.Codecs.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Specialized codecs and postings formats for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>codecs/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj b/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj
index 770857a..a67f8bc 100644
--- a/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj
+++ b/src/Lucene.Net.Expressions/Lucene.Net.Expressions.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Dynamically computed values to sort/facet/search on based on a pluggable grammar for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>expressions/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj b/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj
index e1862e1..d92940d 100644
--- a/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj
+++ b/src/Lucene.Net.Facet/Lucene.Net.Facet.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Faceted indexing and search capabilities for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>facet/package.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj b/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj
index 3273c1f..82a5f19 100644
--- a/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj
+++ b/src/Lucene.Net.Grouping/Lucene.Net.Grouping.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Collectors for grouping search results for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>grouping/package.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj b/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj
index cad555d..ca07678 100644
--- a/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj
+++ b/src/Lucene.Net.Highlighter/Lucene.Net.Highlighter.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Highlights search keywords in results from the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>highlighter/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Join/Lucene.Net.Join.csproj b/src/Lucene.Net.Join/Lucene.Net.Join.csproj
index b28ea84..c2d0745 100644
--- a/src/Lucene.Net.Join/Lucene.Net.Join.csproj
+++ b/src/Lucene.Net.Join/Lucene.Net.Join.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Index-time and Query-time joins for normalized content of the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>join/package.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj b/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj
index 287fb7f..7ee103c 100644
--- a/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj
+++ b/src/Lucene.Net.Memory/Lucene.Net.Memory.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Single-document in-memory index implementation for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>memory/Lucene.Net.Index.Memory.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj b/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj
index 34c0a16..592f4f1 100644
--- a/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj
+++ b/src/Lucene.Net.Misc/Lucene.Net.Misc.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Index tools and other miscellaneous functionality for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>misc/Lucene.Net.Misc.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj b/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj
index 3424fa7..c9db56c 100644
--- a/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj
+++ b/src/Lucene.Net.Queries/Lucene.Net.Queries.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Extended Filters and Queries for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>queries/Lucene.Net.Queries.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj b/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj
index 49f5740..0978558 100644
--- a/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj
+++ b/src/Lucene.Net.QueryParser/Lucene.Net.QueryParser.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Query parsers and parsing framework for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>queryparser/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj b/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
index d02150e..5c8cbbd 100644
--- a/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
+++ b/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Replicator that allows replication of files between a server and client(s) for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>replicator/Lucene.Net.Replicator.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj b/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj
index 14d273b..0f120ee 100644
--- a/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj
+++ b/src/Lucene.Net.Sandbox/Lucene.Net.Sandbox.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Various third party contributions and new ideas extensions for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>sandbox/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj b/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj
index 9bc7ba0..b024670 100644
--- a/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj
+++ b/src/Lucene.Net.Spatial/Lucene.Net.Spatial.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Geospatial search for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>spatial/Lucene.Net.Spatial.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj b/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj
index 4324a03..162b53a 100644
--- a/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj
+++ b/src/Lucene.Net.Suggest/Lucene.Net.Suggest.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Auto-suggest and Spellchecking support for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>suggest/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
index 23b4f0a..849423a 100644
--- a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
+++ b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>Framework for testing Lucene.NET-based applications using NUnit.</Description>
     <PackageDocumentationRelativeUrl>test-framework/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;</TargetFrameworks>
diff --git a/src/Lucene.Net.Tests.AllProjects/Lucene.Net.Tests.AllProjects.csproj b/src/Lucene.Net.Tests.AllProjects/Lucene.Net.Tests.AllProjects.csproj
index b7a0e1f..6219d75 100644
--- a/src/Lucene.Net.Tests.AllProjects/Lucene.Net.Tests.AllProjects.csproj
+++ b/src/Lucene.Net.Tests.AllProjects/Lucene.Net.Tests.AllProjects.csproj
@@ -130,6 +130,6 @@
     <Reference Include="System" />
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Analysis.Common/Lucene.Net.Tests.Analysis.Common.csproj b/src/Lucene.Net.Tests.Analysis.Common/Lucene.Net.Tests.Analysis.Common.csproj
index 478518b..7e9dc8f 100644
--- a/src/Lucene.Net.Tests.Analysis.Common/Lucene.Net.Tests.Analysis.Common.csproj
+++ b/src/Lucene.Net.Tests.Analysis.Common/Lucene.Net.Tests.Analysis.Common.csproj
@@ -55,7 +55,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
     <Reference Include="System.IO.Compression" />
diff --git a/src/Lucene.Net.Tests.Analysis.Kuromoji/Lucene.Net.Tests.Analysis.Kuromoji.csproj b/src/Lucene.Net.Tests.Analysis.Kuromoji/Lucene.Net.Tests.Analysis.Kuromoji.csproj
index 3709aca..671c042 100644
--- a/src/Lucene.Net.Tests.Analysis.Kuromoji/Lucene.Net.Tests.Analysis.Kuromoji.csproj
+++ b/src/Lucene.Net.Tests.Analysis.Kuromoji/Lucene.Net.Tests.Analysis.Kuromoji.csproj
@@ -51,7 +51,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup Condition="'$(TargetFramework)' == 'net461' ">
     <PackageReference Include="System.Text.Encoding.CodePages" Version="$(SystemTextEncodingCodePagesPackageVersion)" />
diff --git a/src/Lucene.Net.Tests.Analysis.Morfologik/Lucene.Net.Tests.Analysis.Morfologik.csproj b/src/Lucene.Net.Tests.Analysis.Morfologik/Lucene.Net.Tests.Analysis.Morfologik.csproj
index 0c2b9f8..5f05a93 100644
--- a/src/Lucene.Net.Tests.Analysis.Morfologik/Lucene.Net.Tests.Analysis.Morfologik.csproj
+++ b/src/Lucene.Net.Tests.Analysis.Morfologik/Lucene.Net.Tests.Analysis.Morfologik.csproj
@@ -52,6 +52,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj b/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj
index 681459f..d2bc905 100644
--- a/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj
+++ b/src/Lucene.Net.Tests.Analysis.OpenNLP/Lucene.Net.Tests.Analysis.OpenNLP.csproj
@@ -46,6 +46,6 @@
     <ProjectReference Include="..\Lucene.Net.TestFramework\Lucene.Net.TestFramework.csproj" />
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Analysis.Phonetic/Lucene.Net.Tests.Analysis.Phonetic.csproj b/src/Lucene.Net.Tests.Analysis.Phonetic/Lucene.Net.Tests.Analysis.Phonetic.csproj
index d7aa1bd..c1bb2c4 100644
--- a/src/Lucene.Net.Tests.Analysis.Phonetic/Lucene.Net.Tests.Analysis.Phonetic.csproj
+++ b/src/Lucene.Net.Tests.Analysis.Phonetic/Lucene.Net.Tests.Analysis.Phonetic.csproj
@@ -45,6 +45,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Analysis.SmartCn/Lucene.Net.Tests.Analysis.SmartCn.csproj b/src/Lucene.Net.Tests.Analysis.SmartCn/Lucene.Net.Tests.Analysis.SmartCn.csproj
index 11fa406..ab005d3 100644
--- a/src/Lucene.Net.Tests.Analysis.SmartCn/Lucene.Net.Tests.Analysis.SmartCn.csproj
+++ b/src/Lucene.Net.Tests.Analysis.SmartCn/Lucene.Net.Tests.Analysis.SmartCn.csproj
@@ -57,7 +57,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
     <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion)"/>
diff --git a/src/Lucene.Net.Tests.Analysis.Stempel/Lucene.Net.Tests.Analysis.Stempel.csproj b/src/Lucene.Net.Tests.Analysis.Stempel/Lucene.Net.Tests.Analysis.Stempel.csproj
index 427c2af..39eaa68 100644
--- a/src/Lucene.Net.Tests.Analysis.Stempel/Lucene.Net.Tests.Analysis.Stempel.csproj
+++ b/src/Lucene.Net.Tests.Analysis.Stempel/Lucene.Net.Tests.Analysis.Stempel.csproj
@@ -49,6 +49,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Benchmark/Lucene.Net.Tests.Benchmark.csproj b/src/Lucene.Net.Tests.Benchmark/Lucene.Net.Tests.Benchmark.csproj
index 1f1428d..1019c87 100644
--- a/src/Lucene.Net.Tests.Benchmark/Lucene.Net.Tests.Benchmark.csproj
+++ b/src/Lucene.Net.Tests.Benchmark/Lucene.Net.Tests.Benchmark.csproj
@@ -81,7 +81,7 @@
     </ProjectReference>
   </ItemGroup>
   
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <PackageReference Include="ICU4N" Version="$(ICU4NPackageVersion)" />
diff --git a/src/Lucene.Net.Tests.Classification/Lucene.Net.Tests.Classification.csproj b/src/Lucene.Net.Tests.Classification/Lucene.Net.Tests.Classification.csproj
index 3c6e032..923602d 100644
--- a/src/Lucene.Net.Tests.Classification/Lucene.Net.Tests.Classification.csproj
+++ b/src/Lucene.Net.Tests.Classification/Lucene.Net.Tests.Classification.csproj
@@ -48,6 +48,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Codecs/Lucene.Net.Tests.Codecs.csproj b/src/Lucene.Net.Tests.Codecs/Lucene.Net.Tests.Codecs.csproj
index 872f074..f15a0a3 100644
--- a/src/Lucene.Net.Tests.Codecs/Lucene.Net.Tests.Codecs.csproj
+++ b/src/Lucene.Net.Tests.Codecs/Lucene.Net.Tests.Codecs.csproj
@@ -42,6 +42,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Demo/Lucene.Net.Tests.Demo.csproj b/src/Lucene.Net.Tests.Demo/Lucene.Net.Tests.Demo.csproj
index f5b74f3..d6bc7f6 100644
--- a/src/Lucene.Net.Tests.Demo/Lucene.Net.Tests.Demo.csproj
+++ b/src/Lucene.Net.Tests.Demo/Lucene.Net.Tests.Demo.csproj
@@ -70,6 +70,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Expressions/Lucene.Net.Tests.Expressions.csproj b/src/Lucene.Net.Tests.Expressions/Lucene.Net.Tests.Expressions.csproj
index 17d40b3..845c9cd 100644
--- a/src/Lucene.Net.Tests.Expressions/Lucene.Net.Tests.Expressions.csproj
+++ b/src/Lucene.Net.Tests.Expressions/Lucene.Net.Tests.Expressions.csproj
@@ -48,6 +48,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Facet/Lucene.Net.Tests.Facet.csproj b/src/Lucene.Net.Tests.Facet/Lucene.Net.Tests.Facet.csproj
index ed0d767..f6189fc 100644
--- a/src/Lucene.Net.Tests.Facet/Lucene.Net.Tests.Facet.csproj
+++ b/src/Lucene.Net.Tests.Facet/Lucene.Net.Tests.Facet.csproj
@@ -54,6 +54,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Grouping/Lucene.Net.Tests.Grouping.csproj b/src/Lucene.Net.Tests.Grouping/Lucene.Net.Tests.Grouping.csproj
index 0faaaef..f59511a 100644
--- a/src/Lucene.Net.Tests.Grouping/Lucene.Net.Tests.Grouping.csproj
+++ b/src/Lucene.Net.Tests.Grouping/Lucene.Net.Tests.Grouping.csproj
@@ -48,6 +48,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Highlighter/Lucene.Net.Tests.Highlighter.csproj b/src/Lucene.Net.Tests.Highlighter/Lucene.Net.Tests.Highlighter.csproj
index 3cf199a..960c215 100644
--- a/src/Lucene.Net.Tests.Highlighter/Lucene.Net.Tests.Highlighter.csproj
+++ b/src/Lucene.Net.Tests.Highlighter/Lucene.Net.Tests.Highlighter.csproj
@@ -55,6 +55,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Join/Lucene.Net.Tests.Join.csproj b/src/Lucene.Net.Tests.Join/Lucene.Net.Tests.Join.csproj
index 69b6836..7c0298b 100644
--- a/src/Lucene.Net.Tests.Join/Lucene.Net.Tests.Join.csproj
+++ b/src/Lucene.Net.Tests.Join/Lucene.Net.Tests.Join.csproj
@@ -51,6 +51,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Memory/Lucene.Net.Tests.Memory.csproj b/src/Lucene.Net.Tests.Memory/Lucene.Net.Tests.Memory.csproj
index 246bc88..befb72c 100644
--- a/src/Lucene.Net.Tests.Memory/Lucene.Net.Tests.Memory.csproj
+++ b/src/Lucene.Net.Tests.Memory/Lucene.Net.Tests.Memory.csproj
@@ -58,6 +58,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Misc/Lucene.Net.Tests.Misc.csproj b/src/Lucene.Net.Tests.Misc/Lucene.Net.Tests.Misc.csproj
index 4a08458..fc8758d 100644
--- a/src/Lucene.Net.Tests.Misc/Lucene.Net.Tests.Misc.csproj
+++ b/src/Lucene.Net.Tests.Misc/Lucene.Net.Tests.Misc.csproj
@@ -45,6 +45,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj b/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
index a71e8a6..5c9d3ac 100644
--- a/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
+++ b/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
@@ -45,6 +45,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.QueryParser/Lucene.Net.Tests.QueryParser.csproj b/src/Lucene.Net.Tests.QueryParser/Lucene.Net.Tests.QueryParser.csproj
index e198002..4a11510 100644
--- a/src/Lucene.Net.Tests.QueryParser/Lucene.Net.Tests.QueryParser.csproj
+++ b/src/Lucene.Net.Tests.QueryParser/Lucene.Net.Tests.QueryParser.csproj
@@ -65,7 +65,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <Compile Update="Support\Flexible\Core\Messages\MessagesTest.Designer.cs">
diff --git a/src/Lucene.Net.Tests.Replicator/Lucene.Net.Tests.Replicator.csproj b/src/Lucene.Net.Tests.Replicator/Lucene.Net.Tests.Replicator.csproj
index cc06c2a..a518765 100644
--- a/src/Lucene.Net.Tests.Replicator/Lucene.Net.Tests.Replicator.csproj
+++ b/src/Lucene.Net.Tests.Replicator/Lucene.Net.Tests.Replicator.csproj
@@ -60,7 +60,7 @@
     </ProjectReference>
   </ItemGroup>
   
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftAspNetCoreTestHostPackageVersion)" />
diff --git a/src/Lucene.Net.Tests.Sandbox/Lucene.Net.Tests.Sandbox.csproj b/src/Lucene.Net.Tests.Sandbox/Lucene.Net.Tests.Sandbox.csproj
index 15d844c..0957ec7 100644
--- a/src/Lucene.Net.Tests.Sandbox/Lucene.Net.Tests.Sandbox.csproj
+++ b/src/Lucene.Net.Tests.Sandbox/Lucene.Net.Tests.Sandbox.csproj
@@ -49,6 +49,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.Spatial/Lucene.Net.Tests.Spatial.csproj b/src/Lucene.Net.Tests.Spatial/Lucene.Net.Tests.Spatial.csproj
index 54ea261..adc1701 100644
--- a/src/Lucene.Net.Tests.Spatial/Lucene.Net.Tests.Spatial.csproj
+++ b/src/Lucene.Net.Tests.Spatial/Lucene.Net.Tests.Spatial.csproj
@@ -52,7 +52,7 @@
     </ProjectReference>
   </ItemGroup>
   
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <PackageReference Include="Spatial4n.Core" Version="$(Spatial4nCorePackageVersion)" />
diff --git a/src/Lucene.Net.Tests.Suggest/Lucene.Net.Tests.Suggest.csproj b/src/Lucene.Net.Tests.Suggest/Lucene.Net.Tests.Suggest.csproj
index 6d09208..676fb36 100644
--- a/src/Lucene.Net.Tests.Suggest/Lucene.Net.Tests.Suggest.csproj
+++ b/src/Lucene.Net.Tests.Suggest/Lucene.Net.Tests.Suggest.csproj
@@ -55,6 +55,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests.TestFramework.DependencyInjection/Lucene.Net.Tests.TestFramework.DependencyInjection.csproj b/src/Lucene.Net.Tests.TestFramework.DependencyInjection/Lucene.Net.Tests.TestFramework.DependencyInjection.csproj
index 485710f..f70246c 100644
--- a/src/Lucene.Net.Tests.TestFramework.DependencyInjection/Lucene.Net.Tests.TestFramework.DependencyInjection.csproj
+++ b/src/Lucene.Net.Tests.TestFramework.DependencyInjection/Lucene.Net.Tests.TestFramework.DependencyInjection.csproj
@@ -45,7 +45,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="$(MicrosoftExtensionsDependencyInjectionPackageVersion)" />
diff --git a/src/Lucene.Net.Tests.TestFramework/Lucene.Net.Tests.TestFramework.csproj b/src/Lucene.Net.Tests.TestFramework/Lucene.Net.Tests.TestFramework.csproj
index ee5c27a..311bf1a 100644
--- a/src/Lucene.Net.Tests.TestFramework/Lucene.Net.Tests.TestFramework.csproj
+++ b/src/Lucene.Net.Tests.TestFramework/Lucene.Net.Tests.TestFramework.csproj
@@ -56,6 +56,6 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/Lucene.Net.Tests._A-D/Lucene.Net.Tests._A-D.csproj b/src/Lucene.Net.Tests._A-D/Lucene.Net.Tests._A-D.csproj
index 792d2ab..723c300 100644
--- a/src/Lucene.Net.Tests._A-D/Lucene.Net.Tests._A-D.csproj
+++ b/src/Lucene.Net.Tests._A-D/Lucene.Net.Tests._A-D.csproj
@@ -73,7 +73,7 @@
     </ProjectReference>
   </ItemGroup>
   
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
   
   <ItemGroup>
     <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
diff --git a/src/Lucene.Net.Tests._E-I/Lucene.Net.Tests._E-I.csproj b/src/Lucene.Net.Tests._E-I/Lucene.Net.Tests._E-I.csproj
index d24a076..601116f 100644
--- a/src/Lucene.Net.Tests._E-I/Lucene.Net.Tests._E-I.csproj
+++ b/src/Lucene.Net.Tests._E-I/Lucene.Net.Tests._E-I.csproj
@@ -79,7 +79,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <PropertyGroup>
     <DefineConstants>$(DefineConstants);FEATURE_INDEXWRITER_TESTS</DefineConstants>
diff --git a/src/Lucene.Net.Tests._I-J/Lucene.Net.Tests._I-J.csproj b/src/Lucene.Net.Tests._I-J/Lucene.Net.Tests._I-J.csproj
index f2e010b..a6efc42 100644
--- a/src/Lucene.Net.Tests._I-J/Lucene.Net.Tests._I-J.csproj
+++ b/src/Lucene.Net.Tests._I-J/Lucene.Net.Tests._I-J.csproj
@@ -84,7 +84,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
   
   <ItemGroup>
     <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
diff --git a/src/Lucene.Net.Tests._J-S/Lucene.Net.Tests._J-S.csproj b/src/Lucene.Net.Tests._J-S/Lucene.Net.Tests._J-S.csproj
index d3bebe9..5811185 100644
--- a/src/Lucene.Net.Tests._J-S/Lucene.Net.Tests._J-S.csproj
+++ b/src/Lucene.Net.Tests._J-S/Lucene.Net.Tests._J-S.csproj
@@ -71,7 +71,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
     <PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="$(SystemRuntimeInteropServicesRuntimeInformationPackageVersion)" />
diff --git a/src/Lucene.Net.Tests._T-Z/Lucene.Net.Tests._T-Z.csproj b/src/Lucene.Net.Tests._T-Z/Lucene.Net.Tests._T-Z.csproj
index 940e02b..b52b2e0 100644
--- a/src/Lucene.Net.Tests._T-Z/Lucene.Net.Tests._T-Z.csproj
+++ b/src/Lucene.Net.Tests._T-Z/Lucene.Net.Tests._T-Z.csproj
@@ -67,7 +67,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <PropertyGroup>
     <DefineConstants>$(DefineConstants);FEATURE_UTIL_TESTS</DefineConstants>
diff --git a/src/Lucene.Net/Lucene.Net.csproj b/src/Lucene.Net/Lucene.Net.csproj
index 661121d..f82a7d7 100644
--- a/src/Lucene.Net/Lucene.Net.csproj
+++ b/src/Lucene.Net/Lucene.Net.csproj
@@ -21,7 +21,7 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj b/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj
index 7e8b3a0..8ef38a4 100644
--- a/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj
+++ b/src/dotnet/Lucene.Net.ICU/Lucene.Net.ICU.csproj
@@ -21,13 +21,13 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <!-- These properties must be set prior to importing NuGet.props -->
+  <!-- These properties must be set prior to importing nuget.props -->
   <PropertyGroup>
     <Description>International Components for Unicode-based features including Thai analyzer support, an international postings highlighter, and BreakIterator support for the vector highlighter for the Lucene.NET full-text search engine library from The Apache Software Foundation.</Description>
     <PackageDocumentationRelativeUrl>icu/overview.html</PackageDocumentationRelativeUrl>
   </PropertyGroup>
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj b/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj
index 69a7893..2800f70 100644
--- a/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj
+++ b/src/dotnet/Lucene.Net.Replicator.AspNetCore/Lucene.Net.Replicator.AspNetCore.csproj
@@ -22,7 +22,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <!-- For now, we are not deploying this to NuGet.org -->
-  <!--<Import Project="$(SolutionDir)build/NuGet.props" />-->
+  <!--<Import Project="$(SolutionDir).build/nuget.props" />-->
   
   <PropertyGroup>
     <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0</TargetFrameworks>
diff --git a/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj b/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj
index 33bd8bc..90b3d09 100644
--- a/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj
+++ b/src/dotnet/Lucene.Net.Tests.CodeAnalysis/Lucene.Net.Tests.CodeAnalysis.csproj
@@ -30,7 +30,7 @@
   </PropertyGroup>
 
   
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="$(MicrosoftCodeAnalysisAnalyzersPackageVersion)" />
diff --git a/src/dotnet/Lucene.Net.Tests.ICU/Lucene.Net.Tests.ICU.csproj b/src/dotnet/Lucene.Net.Tests.ICU/Lucene.Net.Tests.ICU.csproj
index 57ecabc..14d951c 100644
--- a/src/dotnet/Lucene.Net.Tests.ICU/Lucene.Net.Tests.ICU.csproj
+++ b/src/dotnet/Lucene.Net.Tests.ICU/Lucene.Net.Tests.ICU.csproj
@@ -73,7 +73,7 @@
     </ProjectReference>
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
   <ItemGroup>
     <PackageReference Include="ICU4N" Version="$(ICU4NPackageVersion)" />
diff --git a/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj b/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj
index 8d7fa73..7a92962 100644
--- a/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj
+++ b/src/dotnet/tools/Lucene.Net.Tests.Cli/Lucene.Net.Tests.Cli.csproj
@@ -49,6 +49,6 @@
     <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="$(MicrosoftExtensionsConfigurationXmlPackageVersion)" />
   </ItemGroup>
 
-  <Import Project="$(SolutionDir)build/TestReferences.Common.targets" />
+  <Import Project="$(SolutionDir).build/TestReferences.Common.targets" />
 
 </Project>
diff --git a/src/dotnet/tools/lucene-cli/lucene-cli.csproj b/src/dotnet/tools/lucene-cli/lucene-cli.csproj
index 89ca0ef..04bc6ad 100644
--- a/src/dotnet/tools/lucene-cli/lucene-cli.csproj
+++ b/src/dotnet/tools/lucene-cli/lucene-cli.csproj
@@ -21,7 +21,7 @@
 -->
 <Project Sdk="Microsoft.NET.Sdk">
 
-  <Import Project="$(SolutionDir)build/NuGet.props" />
+  <Import Project="$(SolutionDir).build/nuget.props" />
 
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>

[lucenenet] 14/15: run-tests-on-os.yml: Install SDKs for legacy targets, if necessary, but do so after we disable telemetry

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 358d9cfbbde46ee6fa067809a08500c6aad8e73a
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sat Jan 8 19:09:24 2022 +0700

    run-tests-on-os.yml: Install SDKs for legacy targets, if necessary, but do so after we disable telemetry
---
 .build/azure-templates/run-tests-on-os.yml | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/.build/azure-templates/run-tests-on-os.yml b/.build/azure-templates/run-tests-on-os.yml
index 21ed49f..9500e31 100644
--- a/.build/azure-templates/run-tests-on-os.yml
+++ b/.build/azure-templates/run-tests-on-os.yml
@@ -79,6 +79,18 @@ steps:
   parameters:
     sdkVersion: '${{ parameters.dotNetSdkVersion }}'
 
+- task: UseDotNet@2
+  displayName: 'Use .NET Core sdk 3.1.412'
+  inputs:
+    version: 3.1.412
+  condition: and(succeeded(), contains('${{ parameters.framework }}', 'netcoreapp3.'))
+
+- task: UseDotNet@2
+  displayName: 'Use .NET sdk 5.0.400'
+  inputs:
+    version: 5.0.400
+  condition: and(succeeded(), contains('${{ parameters.framework }}', 'net5.'))
+
 #- template: 'show-all-files.yml' # Uncomment for debugging
 - pwsh: |
     $framework = '${{ parameters.framework }}'