diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
new file mode 100644
index 0000000..7828719
--- /dev/null
+++ b/.config/dotnet-tools.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "benchmarkdotnet.tool": {
+ "version": "0.12.0",
+ "commands": [
+ "dotnet-benchmark"
+ ]
+ },
+ "nuke.globaltool": {
+ "version": "0.24.4",
+ "commands": [
+ "nuke"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
new file mode 100644
index 0000000..0fa0fe2
--- /dev/null
+++ b/.github/workflows/dotnet.yml
@@ -0,0 +1,28 @@
+# ------------------------------------------------------------------------------
+#
+#
+# This code was generated.
+#
+# - To turn off auto-generation set:
+#
+# [GitHubActions (AutoGenerate = false)]
+#
+# - To trigger manual generation invoke:
+#
+# nuke --generate-configuration GitHubActions_dotnet --host GitHubActions
+#
+#
+# ------------------------------------------------------------------------------
+
+name: dotnet
+
+on: [push, pull_request]
+
+jobs:
+ ubuntu-latest:
+ name: ubuntu-latest
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Run './test/build.cmd '
+ run: ./test/build.cmd
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
deleted file mode 100644
index 70b0c85..0000000
--- a/.github/workflows/publish.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Publish
-on:
- push:
- tags:
- - '**'
-jobs:
- deploy:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v1.4.0
- with:
- dotnet-version: 3.1.101
- source-url: https://nuget.pkg.github.com/baez90/index.json
- env:
- NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
- - name: Pack for deploying package
- run: dotnet pack --configuration Release
- working-directory: ./src/tand/
- - name: Publish Core package
- run: dotnet nuget push "Tand.Core/bin/Release/Tand.Core.0.0.1.nupkg"
- working-directory: ./src/tand/
- - name: Publish DI extensions package
- run: dotnet nuget push "Tand.Extensions.DependencyInjection/bin/Release/Tand.Extensions.DependencyInjection.0.0.1.nupkg"
- working-directory: ./src/tand/
\ No newline at end of file
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
deleted file mode 100644
index 7d69b7a..0000000
--- a/.github/workflows/validate.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Validate
-
-on:
- push:
- branches: [ '**' ]
- pull_request:
- branches: [ '**' ]
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v1.4.0
- with:
- dotnet-version: 3.1.101
- source-url: https://nuget.pkg.github.com/baez90/index.json
- env:
- NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
- - name: Build with dotnet
- run: dotnet build --configuration Release
- working-directory: ./src/tand/
- - name: Run tests
- run: dotnet test --configuration Release --no-build
- working-directory: ./src/tand/
diff --git a/.gitignore b/.gitignore
index 710698c..9cc6249 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,8 +3,11 @@
###############
/**/DROP/
/**/TEMP/
+**/.tmp/
/**/packages/
/**/bin/
/**/obj/
_site
.idea/
+*.Artifacts/
+**/artifacts/
diff --git a/.nuke b/.nuke
new file mode 100644
index 0000000..8c26cb1
--- /dev/null
+++ b/.nuke
@@ -0,0 +1 @@
+Tand.sln
\ No newline at end of file
diff --git a/src/tand/Tand.sln b/Tand.sln
similarity index 67%
rename from src/tand/Tand.sln
rename to Tand.sln
index ee3a12c..b150fff 100644
--- a/src/tand/Tand.sln
+++ b/Tand.sln
@@ -1,86 +1,118 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26124.0
-MinimumVisualStudioVersion = 15.0.26124.0
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Core", "Tand.Core\Tand.Core.csproj", "{994166B2-862B-451B-B3E5-B2797EFF7022}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4A0DFFF5-7BB2-481A-BB0F-152D89823F48}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C51CA370-A0C7-4229-90FA-ADF7B51DE021}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Core.Tests", "Tand.Core.Tests\Tand.Core.Tests.csproj", "{7CFEE412-6D6A-407B-9FAE-1640F74D98E7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Extensions.DependencyInjection", "Tand.Extensions.DependencyInjection\Tand.Extensions.DependencyInjection.csproj", "{C535C043-7A0E-4F17-89E4-493E7805CFAC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Extensions.DependencyInjection.Tests", "Tand.Extensions.DependencyInjection.Tests\Tand.Extensions.DependencyInjection.Tests.csproj", "{D1287B4D-319A-4D7A-BB5B-93C4E8320480}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x64.ActiveCfg = Debug|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x64.Build.0 = Debug|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x86.ActiveCfg = Debug|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x86.Build.0 = Debug|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|Any CPU.Build.0 = Release|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x64.ActiveCfg = Release|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x64.Build.0 = Release|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x86.ActiveCfg = Release|Any CPU
- {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x86.Build.0 = Release|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x64.ActiveCfg = Debug|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x64.Build.0 = Debug|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x86.ActiveCfg = Debug|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x86.Build.0 = Debug|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|Any CPU.Build.0 = Release|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x64.ActiveCfg = Release|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x64.Build.0 = Release|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x86.ActiveCfg = Release|Any CPU
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x86.Build.0 = Release|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x64.ActiveCfg = Debug|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x64.Build.0 = Debug|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x86.ActiveCfg = Debug|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x86.Build.0 = Debug|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|Any CPU.Build.0 = Release|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x64.ActiveCfg = Release|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x64.Build.0 = Release|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x86.ActiveCfg = Release|Any CPU
- {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x86.Build.0 = Release|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x64.ActiveCfg = Debug|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x64.Build.0 = Debug|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x86.Build.0 = Debug|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|Any CPU.Build.0 = Release|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x64.ActiveCfg = Release|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x64.Build.0 = Release|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x86.ActiveCfg = Release|Any CPU
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {994166B2-862B-451B-B3E5-B2797EFF7022} = {4A0DFFF5-7BB2-481A-BB0F-152D89823F48}
- {7CFEE412-6D6A-407B-9FAE-1640F74D98E7} = {C51CA370-A0C7-4229-90FA-ADF7B51DE021}
- {C535C043-7A0E-4F17-89E4-493E7805CFAC} = {4A0DFFF5-7BB2-481A-BB0F-152D89823F48}
- {D1287B4D-319A-4D7A-BB5B-93C4E8320480} = {C51CA370-A0C7-4229-90FA-ADF7B51DE021}
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26124.0
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4A0DFFF5-7BB2-481A-BB0F-152D89823F48}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C51CA370-A0C7-4229-90FA-ADF7B51DE021}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Core", "src\Tand.Core\Tand.Core.csproj", "{994166B2-862B-451B-B3E5-B2797EFF7022}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Core.Tests", "test\Tand.Core.Tests\Tand.Core.Tests.csproj", "{7CFEE412-6D6A-407B-9FAE-1640F74D98E7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Extensions.DependencyInjection", "src\Tand.Extensions.DependencyInjection\Tand.Extensions.DependencyInjection.csproj", "{C535C043-7A0E-4F17-89E4-493E7805CFAC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Extensions.DependencyInjection.Tests", "test\Tand.Extensions.DependencyInjection.Tests\Tand.Extensions.DependencyInjection.Tests.csproj", "{D1287B4D-319A-4D7A-BB5B-93C4E8320480}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tand.Core.Benchmarks", "test\Tand.Core.Benchmarks\Tand.Core.Benchmarks.csproj", "{9D1DB302-21BA-4C4C-893C-BD390325186A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{7657E6DA-0025-43EE-A26D-5FEA9B3994A7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{3D5041A2-DEFB-4DB8-AD09-74D4B8737F82}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vcs", "vcs", "{803F6FE6-CBC3-44E7-9F45-5722B5832D4B}"
+ProjectSection(SolutionItems) = preProject
+ docfx.json = docfx.json
+ index.md = index.md
+ README.md = README.md
+ toc.yml = toc.yml
+ .gitignore = .gitignore
+ .nuke = .nuke
+EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7657E6DA-0025-43EE-A26D-5FEA9B3994A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7657E6DA-0025-43EE-A26D-5FEA9B3994A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x64.Build.0 = Debug|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Debug|x86.Build.0 = Debug|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|Any CPU.Build.0 = Release|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x64.ActiveCfg = Release|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x64.Build.0 = Release|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x86.ActiveCfg = Release|Any CPU
+ {994166B2-862B-451B-B3E5-B2797EFF7022}.Release|x86.Build.0 = Release|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x64.Build.0 = Debug|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Debug|x86.Build.0 = Debug|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x64.ActiveCfg = Release|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x64.Build.0 = Release|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x86.ActiveCfg = Release|Any CPU
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7}.Release|x86.Build.0 = Release|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x64.Build.0 = Debug|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Debug|x86.Build.0 = Debug|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x64.ActiveCfg = Release|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x64.Build.0 = Release|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x86.ActiveCfg = Release|Any CPU
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC}.Release|x86.Build.0 = Release|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x64.Build.0 = Debug|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Debug|x86.Build.0 = Debug|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x64.ActiveCfg = Release|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x64.Build.0 = Release|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x86.ActiveCfg = Release|Any CPU
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480}.Release|x86.Build.0 = Release|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Debug|x64.Build.0 = Debug|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Debug|x86.Build.0 = Debug|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Release|x64.ActiveCfg = Release|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Release|x64.Build.0 = Release|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Release|x86.ActiveCfg = Release|Any CPU
+ {9D1DB302-21BA-4C4C-893C-BD390325186A}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {994166B2-862B-451B-B3E5-B2797EFF7022} = {4A0DFFF5-7BB2-481A-BB0F-152D89823F48}
+ {7CFEE412-6D6A-407B-9FAE-1640F74D98E7} = {C51CA370-A0C7-4229-90FA-ADF7B51DE021}
+ {C535C043-7A0E-4F17-89E4-493E7805CFAC} = {4A0DFFF5-7BB2-481A-BB0F-152D89823F48}
+ {D1287B4D-319A-4D7A-BB5B-93C4E8320480} = {C51CA370-A0C7-4229-90FA-ADF7B51DE021}
+ {9D1DB302-21BA-4C4C-893C-BD390325186A} = {C51CA370-A0C7-4229-90FA-ADF7B51DE021}
+ {7657E6DA-0025-43EE-A26D-5FEA9B3994A7} = {3D5041A2-DEFB-4DB8-AD09-74D4B8737F82}
+ EndGlobalSection
+EndGlobal
diff --git a/build/.editorconfig b/build/.editorconfig
new file mode 100644
index 0000000..31e43dc
--- /dev/null
+++ b/build/.editorconfig
@@ -0,0 +1,11 @@
+[*.cs]
+dotnet_style_qualification_for_field = false:warning
+dotnet_style_qualification_for_property = false:warning
+dotnet_style_qualification_for_method = false:warning
+dotnet_style_qualification_for_event = false:warning
+dotnet_style_require_accessibility_modifiers = never:warning
+
+csharp_style_expression_bodied_methods = true:silent
+csharp_style_expression_bodied_properties = true:warning
+csharp_style_expression_bodied_indexers = true:warning
+csharp_style_expression_bodied_accessors = true:warning
diff --git a/build/Build.cs b/build/Build.cs
new file mode 100644
index 0000000..036aa7b
--- /dev/null
+++ b/build/Build.cs
@@ -0,0 +1,106 @@
+using Nuke.Common;
+using Nuke.Common.CI.GitHubActions;
+using Nuke.Common.Execution;
+using Nuke.Common.Git;
+using Nuke.Common.IO;
+using Nuke.Common.ProjectModel;
+using Nuke.Common.Tooling;
+using Nuke.Common.Tools.DotNet;
+using Nuke.Common.Tools.GitVersion;
+using Nuke.Common.Utilities.Collections;
+using static Nuke.Common.IO.FileSystemTasks;
+using static Nuke.Common.Tools.DotNet.DotNetTasks;
+using static _build.benchmarks.DotNetBenchmarkExtensions;
+
+[GitHubActions(
+ "dotnet",
+ GitHubActionsImage.UbuntuLatest,
+ AutoGenerate = true,
+ On = new []{GitHubActionsTrigger.Push, GitHubActionsTrigger.PullRequest}
+ )
+]
+[CheckBuildProjectConfigurations]
+[UnsetVisualStudioEnvironmentVariables]
+class Build : NukeBuild
+{
+ /// Support plugins are available for:
+ /// - JetBrains ReSharper https://nuke.build/resharper
+ /// - JetBrains Rider https://nuke.build/rider
+ /// - Microsoft VisualStudio https://nuke.build/visualstudio
+ /// - Microsoft VSCode https://nuke.build/vscode
+ public static int Main() => Execute(x => x.Pack);
+
+ [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")]
+ readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;
+
+ [Solution] readonly Solution Solution;
+ [GitRepository] readonly GitRepository GitRepository;
+ [GitVersion] readonly GitVersion GitVersion;
+
+ AbsolutePath SourceDirectory => RootDirectory / "src";
+ AbsolutePath TestsDirectory => RootDirectory / "test";
+ AbsolutePath ArtifactsDirectory => RootDirectory / "artifacts";
+
+ Target Clean => _ => _
+ .Before(Restore)
+ .Executes(() =>
+ {
+ SourceDirectory.GlobDirectories("**/bin", "**/obj").ForEach(DeleteDirectory);
+ TestsDirectory.GlobDirectories("**/bin", "**/obj").ForEach(DeleteDirectory);
+ EnsureCleanDirectory(ArtifactsDirectory);
+ });
+
+ Target Restore => _ => _
+ .Executes(() =>
+ DotNetRestore(s => s
+ .SetProjectFile(Solution))
+ );
+
+ Target Compile => _ => _
+ .DependsOn(Restore)
+ .DependsOn(Clean)
+ .Executes(() => DotNetBuild(s => s
+ .SetProjectFile(Solution)
+ .SetConfiguration(Configuration)
+ .SetAssemblyVersion(GitVersion.AssemblySemVer)
+ .SetFileVersion(GitVersion.AssemblySemFileVer)
+ .SetInformationalVersion(GitVersion.InformationalVersion)
+ .EnableNoRestore()));
+
+ Target Test => _ => _
+ .DependsOn(Compile)
+ .Executes(() => DotNetTest(s => s
+ .SetProjectFile(Solution)
+ .SetConfiguration(Configuration)
+ .EnableNoRestore()
+ .EnableNoBuild()
+ .EnableLogOutput()));
+
+ Target Pack => _ => _
+ .DependsOn(Test)
+ .OnlyWhenStatic(() => GitRepository.IsOnMasterBranch())
+ .Executes(() => SourceDirectory
+ .GlobFiles("**/*.csproj")
+ .ForEach(csproj => DotNetPack(s => s
+ .SetProject(csproj)
+ .SetConfiguration(Configuration)
+ .SetOutputDirectory(ArtifactsDirectory)
+ .SetVersion(GitVersion.FullSemVer)
+ .EnableIncludeSource()
+ .EnableIncludeSymbols()
+ .EnableNoRestore()
+ .EnableNoBuild()
+ .EnableLogOutput()
+ )));
+
+ Target Benchmark => _ => _
+ .DependsOn(Compile)
+ .Requires(() => Configuration.Equals(Configuration.Release))
+ .Executes(() => TestsDirectory
+ .GlobFiles($"**/bin/{Configuration}/**/*Benchmark*.dll")
+ .ForEach(benchmarkFile => DotNetBenchmark(
+ s => s
+ .WithFilter("*")
+ .WithDllPath(benchmarkFile)))
+ );
+}
\ No newline at end of file
diff --git a/build/_build.csproj b/build/_build.csproj
new file mode 100644
index 0000000..300de38
--- /dev/null
+++ b/build/_build.csproj
@@ -0,0 +1,22 @@
+
+
+
+ Exe
+ netcoreapp3.1
+ CS0649;CS0169
+ ..
+ ..\test
+ 8
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/_build.csproj.DotSettings b/build/_build.csproj.DotSettings
new file mode 100644
index 0000000..fbc421a
--- /dev/null
+++ b/build/_build.csproj.DotSettings
@@ -0,0 +1,25 @@
+
+ DO_NOT_SHOW
+ DO_NOT_SHOW
+ Implicit
+ Implicit
+ ExpressionBody
+ 0
+ NEXT_LINE
+ True
+ False
+ 120
+ IF_OWNER_IS_SINGLE_LINE
+ WRAP_IF_LONG
+ False
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
diff --git a/build/benchmarks/BenchmarkToolSettings.cs b/build/benchmarks/BenchmarkToolSettings.cs
new file mode 100644
index 0000000..ecb4655
--- /dev/null
+++ b/build/benchmarks/BenchmarkToolSettings.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using Nuke.Common.Tooling;
+using Nuke.Common.Tools.DotNet;
+
+namespace _build.benchmarks
+{
+ public class BenchmarkToolSettings : ToolSettings
+ {
+ readonly IDictionary _arguments;
+
+ public BenchmarkToolSettings()
+ {
+ _arguments = new Dictionary();
+ }
+
+ public override string ToolPath => base.ToolPath ?? DotNetTasks.DotNetPath;
+
+ public string DllPath { get; private set; }
+
+ public BenchmarkToolSettings WithDllPath(string path)
+ {
+ DllPath = path;
+ return this;
+ }
+
+ public BenchmarkToolSettings WithFilter(string filter)
+ {
+ _arguments["filter"] = filter;
+ return this;
+ }
+
+ public override Action CustomLogger => DotNetTasks.DotNetLogger;
+
+ protected override Arguments ConfigureArguments(Arguments arguments)
+ {
+ arguments.Add("benchmark");
+ arguments.Add(DllPath);
+ foreach (var (k, v) in _arguments)
+ {
+ arguments.Add($"--{k} {{value}}", v);
+ }
+
+ return base.ConfigureArguments(arguments);
+ }
+ }
+}
\ No newline at end of file
diff --git a/build/benchmarks/DotnetBenchmarkExtensions.cs b/build/benchmarks/DotnetBenchmarkExtensions.cs
new file mode 100644
index 0000000..686c8a3
--- /dev/null
+++ b/build/benchmarks/DotnetBenchmarkExtensions.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using Nuke.Common.Tooling;
+
+namespace _build.benchmarks
+{
+ public static class DotNetBenchmarkExtensions
+ {
+ public static IReadOnlyCollection