Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
d360ef2
CoreEx.Database.Postgres project introduction.
chullybun May 5, 2026
62c9864
Refactor Products sample to leverage PostgreSQL.
chullybun May 8, 2026
cf13ff3
Update to use interim schema for dbex yaml.
chullybun May 8, 2026
a6521c0
Generator fixes.
chullybun May 8, 2026
e403d5f
DbEx finalized version.
chullybun May 11, 2026
61775ff
Merge from latest release/4
chullybun May 11, 2026
8ff2688
Orders merge, and refactor/regen.
chullybun May 12, 2026
1124aa7
CI.yml added.
chullybun May 12, 2026
660f24b
Fix CI.yml
chullybun May 12, 2026
491684d
Add slnf files to aid CI.
chullybun May 12, 2026
1eac786
Further tweaks to CI and test fix.
chullybun May 12, 2026
a6f6c26
CI fix.
chullybun May 12, 2026
00b2b66
Split parrallel and sequential for core to improve perf.
chullybun May 12, 2026
ba40c56
Test fixes.
chullybun May 13, 2026
6f7b9a2
Add retry to CircuitBreaker test.
chullybun May 13, 2026
016a67b
Fix parallelism for samples.
chullybun May 13, 2026
41ec4f9
Another parallelism fix.
chullybun May 13, 2026
e435504
Another parallelism fix attemp?!
chullybun May 13, 2026
c655f51
Another parallelism crack :-(
chullybun May 13, 2026
0f50ce8
Fix async bug.
chullybun May 13, 2026
43cf54a
NUnit result fix for retry.
chullybun May 13, 2026
8e70b7c
Another CI fix.
chullybun May 13, 2026
df67899
Fixes related to PR comments.
chullybun May 14, 2026
83fcc75
Re-gen sql procs.
chullybun May 14, 2026
9c515a0
Tweaks based on review.
chullybun May 14, 2026
0ec9a7d
Puch CI tweak.
chullybun May 14, 2026
59f058c
Another CI tweak.
chullybun May 14, 2026
3702362
Sneak last - link to DTS from Aspire dashboard.
chullybun May 14, 2026
055a64c
Wrap up tweaks.
chullybun May 15, 2026
533eb8b
CI tweak.
chullybun May 15, 2026
fdbc56e
Review feedback tweaks.
chullybun May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-reportgenerator-globaltool": {
"version": "5.4.5",
"commands": [
"reportgenerator"
]
}
}
}
142 changes: 142 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
name: CI

on:
push:
branches: [main]
paths:
- 'src/**'
- 'tests/**'
- 'samples/**'
- 'gen/**'
- 'servicebus/**'
pull_request:
paths:
- 'src/**'
- 'tests/**'
- 'samples/**'
- 'gen/**'
- 'servicebus/**'
Comment on lines +6 to +24
Comment thread
chullybun marked this conversation as resolved.
workflow_dispatch:

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 60

steps:
- uses: actions/checkout@v4

- name: Start containers
run: docker compose up -d

Comment thread
chullybun marked this conversation as resolved.
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.x
9.x
10.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj', '**/Directory.Packages.props') }}
restore-keys: nuget-${{ runner.os }}-

- name: Restore .NET tools
run: dotnet tool restore

- name: Restore (all)
run: dotnet restore CoreEx.sln --verbosity minimal

# --- Core ---

- name: Build core
run: dotnet build CoreEx.Core.slnf --no-restore --configuration Release

- name: Test core (parallel)
run: dotnet test CoreEx.Core.Test.Parallel.slnf --no-build --configuration Release --logger trx --collect "XPlat Code Coverage" --results-directory coverage/core

- name: Test core (sequential)
run: dotnet test CoreEx.Core.Test.Sequential.slnf --no-build --configuration Release --logger trx --collect "XPlat Code Coverage" --results-directory coverage/core -m:1 -p:TestTfmsInParallel=false -p:BuildInParallel=false

- name: Upload core test results
if: always()
uses: actions/upload-artifact@v4
with:
name: core-test-results
path: "coverage/core/**/*.trx"
retention-days: 30

# --- Samples ---

- name: Build samples
run: dotnet build CoreEx.Samples.Build.slnf --no-restore --configuration Release

- name: Database tool (samples/src/Contoso.Products.Database)
working-directory: samples/src/Contoso.Products.Database
run: dotnet run all --no-build --configuration Release -f net10.0 --expect-no-changes

- name: Database tool (samples/src/Contoso.Shopping.Database)
working-directory: samples/src/Contoso.Shopping.Database
run: dotnet run all --no-build --configuration Release -f net10.0 --expect-no-changes

- name: Database tool (samples/src/Contoso.Orders.Database)
working-directory: samples/src/Contoso.Orders.Database
run: dotnet run all --no-build --configuration Release -f net10.0 --expect-no-changes

- name: Test samples
run: dotnet test CoreEx.Samples.Test.slnf --no-build --configuration Release --logger trx --collect "XPlat Code Coverage" --results-directory coverage/samples -m:1 -p:TestTfmsInParallel=false -p:BuildInParallel=false

- name: Upload samples test results
if: always()
uses: actions/upload-artifact@v4
with:
name: samples-test-results
path: "coverage/samples/**/*.trx"
retention-days: 30

# --- Coverage ---

- name: Merge and generate coverage report
if: always()
run: |
dotnet tool run reportgenerator \
-reports:"coverage/**/coverage.cobertura.xml" \
-targetdir:"coverage/report" \
-reporttypes:"HtmlInline_AzurePipelines;Cobertura;Badges" \
-assemblyfilters:"-*Test*;-*E2E*"

- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/report
retention-days: 30

# --- Cleanup ---

- name: Capture container logs on failure
if: failure()
run: docker compose logs --no-color > container-logs.txt 2>&1

- name: Upload container logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: container-logs
path: container-logs.txt
retention-days: 30

- name: Stop containers
if: always()
run: docker compose down
15 changes: 15 additions & 0 deletions CoreEx.Core.Test.Parallel.slnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"solution": {
"path": "CoreEx.sln",
"projects": [
"tests/CoreEx.Test.Unit/CoreEx.Test.Unit.csproj",
"tests/CoreEx.AspNetCore.Test.Unit/CoreEx.AspNetCore.Test.Unit.csproj",
"tests/CoreEx.Data.Test.Unit/CoreEx.Data.Test.Unit.csproj",
"tests/CoreEx.Database.Test.Unit/CoreEx.Database.Test.Unit.csproj",
"tests/CoreEx.DomainDriven.Test.Unit/CoreEx.DomainDriven.Test.Unit.csproj",
"tests/CoreEx.Events.Test.Unit/CoreEx.Events.Test.Unit.csproj",
"tests/CoreEx.RefData.Test.Unit/CoreEx.RefData.Test.Unit.csproj",
"tests/CoreEx.Validation.Test.Unit/CoreEx.Validation.Test.Unit.csproj"
]
}
}
11 changes: 11 additions & 0 deletions CoreEx.Core.Test.Sequential.slnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"solution": {
"path": "CoreEx.sln",
"projects": [
"tests/CoreEx.Azure.Messaging.ServiceBus.Test.Unit/CoreEx.Azure.Messaging.ServiceBus.Test.Unit.csproj",
"tests/CoreEx.Caching.Redis.Test.Unit/CoreEx.Caching.Redis.Test.Unit.csproj",
"tests/CoreEx.Database.SqlServer.Test.Unit/CoreEx.Database.SqlServer.Test.Unit.csproj",
"tests/CoreEx.Database.Postgres.Test.Unit/CoreEx.Database.Postgres.Test.Unit.csproj"
]
}
}
36 changes: 36 additions & 0 deletions CoreEx.Core.slnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"solution": {
"path": "CoreEx.sln",
"projects": [
"gen/CoreEx.Generator/CoreEx.Generator.csproj",
"src/CoreEx/CoreEx.csproj",
"src/CoreEx.AspNetCore/CoreEx.AspNetCore.csproj",
"src/CoreEx.AspNetCore.NSwag/CoreEx.AspNetCore.NSwag.csproj",
"src/CoreEx.Azure.Messaging.ServiceBus/CoreEx.Azure.Messaging.ServiceBus.csproj",
"src/CoreEx.Caching.FusionCache/CoreEx.Caching.FusionCache.csproj",
"src/CoreEx.Data/CoreEx.Data.csproj",
"src/CoreEx.Database/CoreEx.Database.csproj",
"src/CoreEx.Database.Postgres/CoreEx.Database.Postgres.csproj",
"src/CoreEx.Database.SqlServer/CoreEx.Database.SqlServer.csproj",
"src/CoreEx.DomainDriven/CoreEx.DomainDriven.csproj",
"src/CoreEx.EntityFrameworkCore/CoreEx.EntityFrameworkCore.csproj",
"src/CoreEx.Events/CoreEx.Events.csproj",
"src/CoreEx.RefData/CoreEx.RefData.csproj",
"src/CoreEx.UnitTesting/CoreEx.UnitTesting.csproj",
"src/CoreEx.Validation/CoreEx.Validation.csproj",
"tests/CoreEx.AspNetCore.Test.Api/CoreEx.AspNetCore.Test.Api.csproj",
"tests/CoreEx.AspNetCore.Test.Unit/CoreEx.AspNetCore.Test.Unit.csproj",
"tests/CoreEx.Azure.Messaging.ServiceBus.Test.Unit/CoreEx.Azure.Messaging.ServiceBus.Test.Unit.csproj",
"tests/CoreEx.Caching.Redis.Test.Unit/CoreEx.Caching.Redis.Test.Unit.csproj",
"tests/CoreEx.Data.Test.Unit/CoreEx.Data.Test.Unit.csproj",
"tests/CoreEx.Database.Postgres.Test.Unit/CoreEx.Database.Postgres.Test.Unit.csproj",
"tests/CoreEx.Database.SqlServer.Test.Unit/CoreEx.Database.SqlServer.Test.Unit.csproj",
"tests/CoreEx.Database.Test.Unit/CoreEx.Database.Test.Unit.csproj",
"tests/CoreEx.DomainDriven.Test.Unit/CoreEx.DomainDriven.Test.Unit.csproj",
"tests/CoreEx.Events.Test.Unit/CoreEx.Events.Test.Unit.csproj",
"tests/CoreEx.RefData.Test.Unit/CoreEx.RefData.Test.Unit.csproj",
"tests/CoreEx.Test.Unit/CoreEx.Test.Unit.csproj",
"tests/CoreEx.Validation.Test.Unit/CoreEx.Validation.Test.Unit.csproj"
]
}
}
42 changes: 42 additions & 0 deletions CoreEx.Samples.Build.slnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"solution": {
"path": "CoreEx.sln",
"projects": [
"samples/aspire/Contoso.Aspire/Contoso.Aspire.csproj",
"samples/src/Contoso.Order.Workflow.Client/Contoso.Order.Workflow.Client.csproj",
"samples/src/Contoso.Order.Workflow.Worker/Contoso.Order.Workflow.Worker.csproj",
"samples/src/Contoso.Order.Workflow.Workflow/Contoso.Order.Workflow.Workflow.csproj",
"samples/src/Contoso.Orders.Api/Contoso.Orders.Api.csproj",
"samples/src/Contoso.Orders.Application/Contoso.Orders.Application.csproj",
"samples/src/Contoso.Orders.Contracts/Contoso.Orders.Contracts.csproj",
"samples/src/Contoso.Orders.Database/Contoso.Orders.Database.csproj",
"samples/src/Contoso.Orders.Infrastructure/Contoso.Orders.Infrastructure.csproj",
"samples/src/Contoso.Products.Api/Contoso.Products.Api.csproj",
"samples/src/Contoso.Products.Application/Contoso.Products.Application.csproj",
"samples/src/Contoso.Products.Contracts/Contoso.Products.Contracts.csproj",
"samples/src/Contoso.Products.Database/Contoso.Products.Database.csproj",
"samples/src/Contoso.Products.Infrastructure/Contoso.Products.Infrastructure.csproj",
"samples/src/Contoso.Products.Outbox.Relay/Contoso.Products.Outbox.Relay.csproj",
"samples/src/Contoso.Products.Subscribe/Contoso.Products.Subscribe.csproj",
"samples/src/Contoso.Shopping.Api/Contoso.Shopping.Api.csproj",
"samples/src/Contoso.Shopping.Application/Contoso.Shopping.Application.csproj",
"samples/src/Contoso.Shopping.Contracts/Contoso.Shopping.Contracts.csproj",
"samples/src/Contoso.Shopping.Database/Contoso.Shopping.Database.csproj",
"samples/src/Contoso.Shopping.Domain/Contoso.Shopping.Domain.csproj",
"samples/src/Contoso.Shopping.Infrastructure/Contoso.Shopping.Infrastructure.csproj",
"samples/src/Contoso.Shopping.Outbox.Relay/Contoso.Shopping.Outbox.Relay.csproj",
"samples/src/Contoso.Shopping.Subscribe/Contoso.Shopping.Subscribe.csproj",
"samples/tests/Contoso.E2E.Runner/Contoso.E2E.Runner.csproj",
"samples/tests/Contoso.Orders.Test.Api/Contoso.Orders.Test.Api.csproj",
"samples/tests/Contoso.Orders.Test.Common/Contoso.Orders.Test.Common.csproj",
"samples/tests/Contoso.Orders.Test.Unit/Contoso.Orders.Test.Unit.csproj",
"samples/tests/Contoso.Products.Test.Api/Contoso.Products.Test.Api.csproj",
"samples/tests/Contoso.Products.Test.Common/Contoso.Products.Test.Common.csproj",
"samples/tests/Contoso.Products.Test.Outbox.Relay/Contoso.Products.Test.Outbox.Relay.csproj",
"samples/tests/Contoso.Products.Test.Subscribe/Contoso.Products.Test.Subscribe.csproj",
"samples/tests/Contoso.Products.Test.Unit/Contoso.Products.Test.Unit.csproj",
"samples/tests/Contoso.Shopping.Test.Api/Contoso.Shopping.Test.Api.csproj",
"samples/tests/Contoso.Shopping.Test.Common/Contoso.Shopping.Test.Common.csproj"
]
}
}
14 changes: 14 additions & 0 deletions CoreEx.Samples.Test.slnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"solution": {
"path": "CoreEx.sln",
"projects": [
"samples/tests/Contoso.Orders.Test.Api/Contoso.Orders.Test.Api.csproj",
"samples/tests/Contoso.Orders.Test.Unit/Contoso.Orders.Test.Unit.csproj",
"samples/tests/Contoso.Products.Test.Api/Contoso.Products.Test.Api.csproj",
"samples/tests/Contoso.Products.Test.Outbox.Relay/Contoso.Products.Test.Outbox.Relay.csproj",
"samples/tests/Contoso.Products.Test.Subscribe/Contoso.Products.Test.Subscribe.csproj",
"samples/tests/Contoso.Products.Test.Unit/Contoso.Products.Test.Unit.csproj",
"samples/tests/Contoso.Shopping.Test.Api/Contoso.Shopping.Test.Api.csproj"
]
}
}
46 changes: 46 additions & 0 deletions CoreEx.sln
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
nuget-publish.ps1 = nuget-publish.ps1
README.md = README.md
SECURITY.md = SECURITY.md
strong-name-key.snk = strong-name-key.snk
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreEx.RefData", "src\CoreEx.RefData\CoreEx.RefData.csproj", "{F3F98268-80E9-4441-B6C9-8D384EE9C857}"
Expand Down Expand Up @@ -196,6 +197,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreEx.Generator", "gen\Cor
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gen", "gen", "{570F3635-BEB1-4067-B10F-33DD890BDBD4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreEx.Database.Postgres", "src\CoreEx.Database.Postgres\CoreEx.Database.Postgres.csproj", "{1855A84E-4876-49A4-AC22-3881ECAB2534}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreEx.Database.Postgres.Test.Console", "tests\CoreEx.Database.Postgres.Test.Console\CoreEx.Database.Postgres.Test.Console.csproj", "{06B73659-3DFE-41B2-B8DF-42C25CD547D6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreEx.Database.Postgres.Test.Unit", "tests\CoreEx.Database.Postgres.Test.Unit\CoreEx.Database.Postgres.Test.Unit.csproj", "{6C876E5E-5972-4801-9565-E314545BBB06}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -962,6 +969,42 @@ Global
{54CD8587-0F45-2C2C-7AE4-BB92254202F5}.Release|x64.Build.0 = Release|Any CPU
{54CD8587-0F45-2C2C-7AE4-BB92254202F5}.Release|x86.ActiveCfg = Release|Any CPU
{54CD8587-0F45-2C2C-7AE4-BB92254202F5}.Release|x86.Build.0 = Release|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Debug|x64.ActiveCfg = Debug|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Debug|x64.Build.0 = Debug|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Debug|x86.ActiveCfg = Debug|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Debug|x86.Build.0 = Debug|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Release|Any CPU.Build.0 = Release|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Release|x64.ActiveCfg = Release|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Release|x64.Build.0 = Release|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Release|x86.ActiveCfg = Release|Any CPU
{1855A84E-4876-49A4-AC22-3881ECAB2534}.Release|x86.Build.0 = Release|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Debug|x64.ActiveCfg = Debug|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Debug|x64.Build.0 = Debug|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Debug|x86.ActiveCfg = Debug|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Debug|x86.Build.0 = Debug|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Release|Any CPU.Build.0 = Release|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Release|x64.ActiveCfg = Release|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Release|x64.Build.0 = Release|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Release|x86.ActiveCfg = Release|Any CPU
{06B73659-3DFE-41B2-B8DF-42C25CD547D6}.Release|x86.Build.0 = Release|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Debug|x64.ActiveCfg = Debug|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Debug|x64.Build.0 = Debug|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Debug|x86.ActiveCfg = Debug|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Debug|x86.Build.0 = Debug|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Release|Any CPU.Build.0 = Release|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Release|x64.ActiveCfg = Release|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Release|x64.Build.0 = Release|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Release|x86.ActiveCfg = Release|Any CPU
{6C876E5E-5972-4801-9565-E314545BBB06}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -1046,6 +1089,9 @@ Global
{70E70027-97A1-4862-953F-32874684A334} = {848DC6FA-94E0-4805-9107-501102BC4A6D}
{09E56536-DD59-49BD-A48F-41299C5B7ABF} = {95780E7B-43ED-4404-8917-A46D4DC30083}
{54CD8587-0F45-2C2C-7AE4-BB92254202F5} = {570F3635-BEB1-4067-B10F-33DD890BDBD4}
{1855A84E-4876-49A4-AC22-3881ECAB2534} = {F31B53BC-66DD-4844-8349-D4B0CB04EA12}
{06B73659-3DFE-41B2-B8DF-42C25CD547D6} = {D37F89FC-A03D-4501-8414-34AE0C6FC765}
{6C876E5E-5972-4801-9565-E314545BBB06} = {D37F89FC-A03D-4501-8414-34AE0C6FC765}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {99046729-5A7F-41B6-9415-F77D8E9C44F1}
Expand Down
Loading
Loading