From 507e1801346b17940a22d6252d5a03a8ad448efc Mon Sep 17 00:00:00 2001 From: chris bell Date: Fri, 23 Oct 2026 20:34:38 -0500 Subject: [PATCH] Setting up dev env and project structure --- .editorconfig | 61 +++++++++++ .gitignore | 6 +- Directory.Build.props | 27 +++++ Directory.Packages.props | 15 +++ flake.nix | 36 ++----- global.json | 7 ++ omnisharp.json | 14 +++ src/Vssm.Api/Vssm.Api.csproj | 5 + src/Vssm.Api/packages.lock.json | 6 ++ src/Vssm.Cli/Program.cs | 1 + src/Vssm.Cli/Vssm.Cli.csproj | 7 ++ src/Vssm.Cli/packages.lock.json | 6 ++ src/Vssm.Contracts/Vssm.Contracts.csproj | 7 ++ src/Vssm.Contracts/packages.lock.json | 6 ++ src/Vssm.Core/Vssm.Core.csproj | 7 ++ src/Vssm.Core/packages.lock.json | 6 ++ src/Vssm.Daemon/Program.cs | 1 + src/Vssm.Daemon/Vssm.Daemon.csproj | 7 ++ src/Vssm.Daemon/packages.lock.json | 6 ++ tests/Directory.Build.props | 10 ++ tests/FakeGameServer/FakeGameServer.csproj | 8 ++ tests/FakeGameServer/Program.cs | 1 + tests/FakeGameServer/packages.lock.json | 6 ++ tests/Vssm.Api.Tests/Vssm.Api.Tests.csproj | 18 ++++ tests/Vssm.Api.Tests/packages.lock.json | 107 +++++++++++++++++++ tests/Vssm.Core.Tests/Vssm.Core.Tests.csproj | 18 ++++ tests/Vssm.Core.Tests/packages.lock.json | 107 +++++++++++++++++++ vssm.slnx | 14 +++ 28 files changed, 491 insertions(+), 29 deletions(-) create mode 100644 .editorconfig create mode 100644 Directory.Build.props create mode 100644 Directory.Packages.props create mode 100644 global.json create mode 100644 omnisharp.json create mode 100644 src/Vssm.Api/Vssm.Api.csproj create mode 100644 src/Vssm.Api/packages.lock.json create mode 100644 src/Vssm.Cli/Program.cs create mode 100644 src/Vssm.Cli/Vssm.Cli.csproj create mode 100644 src/Vssm.Cli/packages.lock.json create mode 100644 src/Vssm.Contracts/Vssm.Contracts.csproj create mode 100644 src/Vssm.Contracts/packages.lock.json create mode 100644 src/Vssm.Core/Vssm.Core.csproj create mode 100644 src/Vssm.Core/packages.lock.json create mode 100644 src/Vssm.Daemon/Program.cs create mode 100644 src/Vssm.Daemon/Vssm.Daemon.csproj create mode 100644 src/Vssm.Daemon/packages.lock.json create mode 100644 tests/Directory.Build.props create mode 100644 tests/FakeGameServer/FakeGameServer.csproj create mode 100644 tests/FakeGameServer/Program.cs create mode 100644 tests/FakeGameServer/packages.lock.json create mode 100644 tests/Vssm.Api.Tests/Vssm.Api.Tests.csproj create mode 100644 tests/Vssm.Api.Tests/packages.lock.json create mode 100644 tests/Vssm.Core.Tests/Vssm.Core.Tests.csproj create mode 100644 tests/Vssm.Core.Tests/packages.lock.json create mode 100644 vssm.slnx diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d3eeffe --- /dev/null +++ b/.editorconfig @@ -0,0 +1,61 @@ + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[*.{json,yml,yaml,nix,csproj,props,targets,slnx,xml}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[*.cs] +# Namespaces and usings +csharp_style_namespace_declarations = file_scoped:warning +csharp_using_directive_placement = outside_namespace:warning +dotnet_sort_system_directives_first = true + +# Language preferences +dotnet_style_qualification_for_field = false:warning +dotnet_style_qualification_for_property = false:warning +dotnet_style_qualification_for_method = false:warning +dotnet_style_predefined_type_for_locals_parameters_members = true:warning +csharp_style_var_for_built_in_types = false:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = false:suggestion +csharp_prefer_braces = true:warning +csharp_style_expression_bodied_methods = when_on_single_line:suggestion +csharp_style_prefer_primary_constructors = true:suggestion +dotnet_style_readonly_field = true:warning + +# Formatting +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true + +# Naming: interfaces start with I, private fields start with _ +dotnet_naming_rule.interfaces_begin_with_i.symbols = interfaces +dotnet_naming_rule.interfaces_begin_with_i.style = begins_with_i +dotnet_naming_rule.interfaces_begin_with_i.severity = warning +dotnet_naming_symbols.interfaces.applicable_kinds = interface +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_rule.private_fields_underscore.symbols = private_fields +dotnet_naming_rule.private_fields_underscore.style = underscore_camel +dotnet_naming_rule.private_fields_underscore.severity = warning +dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_naming_symbols.private_fields.applicable_accessibilities = private +dotnet_naming_style.underscore_camel.required_prefix = _ +dotnet_naming_style.underscore_camel.capitalization = camel_case + +# Tests: allow underscores in method names (Method_Scenario_Expected) +[tests/**/*.cs] +dotnet_diagnostic.CA1707.severity = none diff --git a/.gitignore b/.gitignore index 858f26f..b9aaecd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ .direnv/ .envrc -compile_commands.json - -build/ - +bin/ +obj/ diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..a56ae80 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,27 @@ + + + + net10.0 + latest + enable + enable + true + + + + true + latest-recommended + true + + + + true + true + + + + true + true + + + diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..6a5efed --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,15 @@ + + + + true + true + + + + + + + + + + diff --git a/flake.nix b/flake.nix index db05232..ad51710 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "VSSM dev environment"; + description = "vssm - dev environment"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -11,32 +11,18 @@ in { devShells = forAllSystems (pkgs: { - default = pkgs.mkShell.override { stdenv = pkgs.clangStdenv; } { - nativeBuildInputs = with pkgs; [ - cmake - ninja - pkg-config - clang-tools - gdb - valgrind + default = pkgs.mkShell { + packages = with pkgs; [ + dotnetCorePackages.sdk_10_0 + netcoredbg + omnisharp-roslyn + git ]; - buildInputs = with pkgs; [ - boost - curl - libarchive - openssl - zlib - zstd - nlohmann_json - spdlog - cli11 - # dotnet-runtime_8 - ]; - - shellHook = '' - export CMAKE_EXPORT_COMPILE_COMMANDS=1 - ''; + # disable telemetry, banner, and dev HTTPS cert generation + DOTNET_CLI_TELEMETRY_OPTOUT = "1"; + DOTNET_NOLOGO = "1"; + DOTNET_GENERATE_ASPNET_CERTIFICATE = "false"; }; }); }; diff --git a/global.json b/global.json new file mode 100644 index 0000000..d46d21e --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "10.0.100", + "rollForward": "latestFeature", + "allowPrerelease": false + } +} diff --git a/omnisharp.json b/omnisharp.json new file mode 100644 index 0000000..362974f --- /dev/null +++ b/omnisharp.json @@ -0,0 +1,14 @@ +{ + "FormattingOptions": { + "EnableEditorConfigSupport": true, + "OrganizeImports": true + }, + "RoslynExtensionsOptions": { + "EnableAnalyzersSupport": true, + "EnableImportCompletion": true, + "AnalyzeOpenDocumentsOnly": false + }, + "Sdk": { + "IncludePrereleases": false + } +} diff --git a/src/Vssm.Api/Vssm.Api.csproj b/src/Vssm.Api/Vssm.Api.csproj new file mode 100644 index 0000000..3d51fd0 --- /dev/null +++ b/src/Vssm.Api/Vssm.Api.csproj @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Vssm.Api/packages.lock.json b/src/Vssm.Api/packages.lock.json new file mode 100644 index 0000000..6afd678 --- /dev/null +++ b/src/Vssm.Api/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 2, + "dependencies": { + "net10.0": {} + } +} \ No newline at end of file diff --git a/src/Vssm.Cli/Program.cs b/src/Vssm.Cli/Program.cs new file mode 100644 index 0000000..1bc52a6 --- /dev/null +++ b/src/Vssm.Cli/Program.cs @@ -0,0 +1 @@ +Console.WriteLine("Hello, World!"); diff --git a/src/Vssm.Cli/Vssm.Cli.csproj b/src/Vssm.Cli/Vssm.Cli.csproj new file mode 100644 index 0000000..52e6553 --- /dev/null +++ b/src/Vssm.Cli/Vssm.Cli.csproj @@ -0,0 +1,7 @@ + + + + Exe + + + diff --git a/src/Vssm.Cli/packages.lock.json b/src/Vssm.Cli/packages.lock.json new file mode 100644 index 0000000..6afd678 --- /dev/null +++ b/src/Vssm.Cli/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 2, + "dependencies": { + "net10.0": {} + } +} \ No newline at end of file diff --git a/src/Vssm.Contracts/Vssm.Contracts.csproj b/src/Vssm.Contracts/Vssm.Contracts.csproj new file mode 100644 index 0000000..a68f5a0 --- /dev/null +++ b/src/Vssm.Contracts/Vssm.Contracts.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/Vssm.Contracts/packages.lock.json b/src/Vssm.Contracts/packages.lock.json new file mode 100644 index 0000000..6afd678 --- /dev/null +++ b/src/Vssm.Contracts/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 2, + "dependencies": { + "net10.0": {} + } +} \ No newline at end of file diff --git a/src/Vssm.Core/Vssm.Core.csproj b/src/Vssm.Core/Vssm.Core.csproj new file mode 100644 index 0000000..a68f5a0 --- /dev/null +++ b/src/Vssm.Core/Vssm.Core.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/Vssm.Core/packages.lock.json b/src/Vssm.Core/packages.lock.json new file mode 100644 index 0000000..6afd678 --- /dev/null +++ b/src/Vssm.Core/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 2, + "dependencies": { + "net10.0": {} + } +} \ No newline at end of file diff --git a/src/Vssm.Daemon/Program.cs b/src/Vssm.Daemon/Program.cs new file mode 100644 index 0000000..1bc52a6 --- /dev/null +++ b/src/Vssm.Daemon/Program.cs @@ -0,0 +1 @@ +Console.WriteLine("Hello, World!"); diff --git a/src/Vssm.Daemon/Vssm.Daemon.csproj b/src/Vssm.Daemon/Vssm.Daemon.csproj new file mode 100644 index 0000000..52e6553 --- /dev/null +++ b/src/Vssm.Daemon/Vssm.Daemon.csproj @@ -0,0 +1,7 @@ + + + + Exe + + + diff --git a/src/Vssm.Daemon/packages.lock.json b/src/Vssm.Daemon/packages.lock.json new file mode 100644 index 0000000..6afd678 --- /dev/null +++ b/src/Vssm.Daemon/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 2, + "dependencies": { + "net10.0": {} + } +} \ No newline at end of file diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props new file mode 100644 index 0000000..8b2aef5 --- /dev/null +++ b/tests/Directory.Build.props @@ -0,0 +1,10 @@ + + + + + + false + true + + + diff --git a/tests/FakeGameServer/FakeGameServer.csproj b/tests/FakeGameServer/FakeGameServer.csproj new file mode 100644 index 0000000..6648491 --- /dev/null +++ b/tests/FakeGameServer/FakeGameServer.csproj @@ -0,0 +1,8 @@ + + + + Exe + false + + + diff --git a/tests/FakeGameServer/Program.cs b/tests/FakeGameServer/Program.cs new file mode 100644 index 0000000..1bc52a6 --- /dev/null +++ b/tests/FakeGameServer/Program.cs @@ -0,0 +1 @@ +Console.WriteLine("Hello, World!"); diff --git a/tests/FakeGameServer/packages.lock.json b/tests/FakeGameServer/packages.lock.json new file mode 100644 index 0000000..6afd678 --- /dev/null +++ b/tests/FakeGameServer/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 2, + "dependencies": { + "net10.0": {} + } +} \ No newline at end of file diff --git a/tests/Vssm.Api.Tests/Vssm.Api.Tests.csproj b/tests/Vssm.Api.Tests/Vssm.Api.Tests.csproj new file mode 100644 index 0000000..c66a624 --- /dev/null +++ b/tests/Vssm.Api.Tests/Vssm.Api.Tests.csproj @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tests/Vssm.Api.Tests/packages.lock.json b/tests/Vssm.Api.Tests/packages.lock.json new file mode 100644 index 0000000..837371f --- /dev/null +++ b/tests/Vssm.Api.Tests/packages.lock.json @@ -0,0 +1,107 @@ +{ + "version": 2, + "dependencies": { + "net10.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[6.0.4, )", + "resolved": "6.0.4", + "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", + "dependencies": { + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.9.3, )", + "resolved": "2.9.3", + "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", + "dependencies": { + "xunit.analyzers": "1.18.0", + "xunit.assert": "2.9.3", + "xunit.core": "[2.9.3]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[3.1.4, )", + "resolved": "3.1.4", + "contentHash": "5mj99LvCqrq3CNi06xYdyIAXOEh+5b33F2nErCzI5zWiDdLHXiPXEWFSUAF8zlIv0ZWqjZNCwHTQeAPYbF3pCg==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.14.1", + "contentHash": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.14.1", + "contentHash": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.14.1", + "Newtonsoft.Json": "13.0.3" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.3", + "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.18.0", + "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]", + "xunit.extensibility.execution": "[2.9.3]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", + "dependencies": { + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]" + } + }, + "vssm.core": { + "type": "Project" + } + } + } +} \ No newline at end of file diff --git a/tests/Vssm.Core.Tests/Vssm.Core.Tests.csproj b/tests/Vssm.Core.Tests/Vssm.Core.Tests.csproj new file mode 100644 index 0000000..c66a624 --- /dev/null +++ b/tests/Vssm.Core.Tests/Vssm.Core.Tests.csproj @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tests/Vssm.Core.Tests/packages.lock.json b/tests/Vssm.Core.Tests/packages.lock.json new file mode 100644 index 0000000..837371f --- /dev/null +++ b/tests/Vssm.Core.Tests/packages.lock.json @@ -0,0 +1,107 @@ +{ + "version": 2, + "dependencies": { + "net10.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[6.0.4, )", + "resolved": "6.0.4", + "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", + "dependencies": { + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.9.3, )", + "resolved": "2.9.3", + "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", + "dependencies": { + "xunit.analyzers": "1.18.0", + "xunit.assert": "2.9.3", + "xunit.core": "[2.9.3]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[3.1.4, )", + "resolved": "3.1.4", + "contentHash": "5mj99LvCqrq3CNi06xYdyIAXOEh+5b33F2nErCzI5zWiDdLHXiPXEWFSUAF8zlIv0ZWqjZNCwHTQeAPYbF3pCg==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.14.1", + "contentHash": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.14.1", + "contentHash": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.14.1", + "Newtonsoft.Json": "13.0.3" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.3", + "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.18.0", + "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]", + "xunit.extensibility.execution": "[2.9.3]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", + "dependencies": { + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]" + } + }, + "vssm.core": { + "type": "Project" + } + } + } +} \ No newline at end of file diff --git a/vssm.slnx b/vssm.slnx new file mode 100644 index 0000000..c087b1a --- /dev/null +++ b/vssm.slnx @@ -0,0 +1,14 @@ + + + + + + + + + + + + + +