Skip to content

Commit 0e15ab5

Browse files
ElanHassonclaudeCopilot
authored
v1.0 API redesign: annotation-based config, client library, and OTel integration (#289)
* chore: add .worktrees to gitignore * chore: add test project scaffold Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add Aspire annotation types for Temporal server config Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add ITemporalServerResource interface and refactor resource types Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add TemporalServerArgsBuilder that reads annotations to build CLI args Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add fluent API and endpoint configuration for Temporal resources Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: remove TemporalServerResourceArguments and TemporalServerResourceBuilder Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: bump package version to 1.0.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: apply dependabot version bumps across all dependencies Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add client library with auto-OTel, AddTemporalClient, and AddTemporalWorker Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add Temporal health check to client library Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update sample apps to use v1.0 API - AppHost: fluent extension methods, no lambda callbacks - Worker: AddTemporalWorker() with auto-OTel, remove manual boilerplate - Api: AddTemporalClient() with auto-OTel, remove manual boilerplate - ServiceDefaults: AddTemporalServiceDefaults() replaces manual OTel wiring - Replace direct Temporal package references with Client library project refs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update README for v1.0 API - Document new fluent extension method API (no lambda callbacks) - Add client library section with AddTemporalWorker/AddTemporalClient examples - Add AddTemporalServiceDefaults() for OTel integration - Update configuration reference with new method names - Document automatic OTel and health check features Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Expand test coverage from 43 to 72 tests Hosting library: - Fluent API: WithUiIp, WithUiAssetPath, WithUiCodecEndpoint, WithHeadlessUi (executable) - Executable endpoints: WithUiPort, WithMetricsEndpoint, WithHttpPort, WithHeadlessUi, args callback - ArgsBuilder: float, double, long dynamic config types Client library (new coverage): - AddTemporalClient: missing connection string throws, registers services/health check/runtime - AddTemporalWorker: missing connection string throws, registers services/health check/runtime - Default connection name, configureOptions callback, return types - Runtime registered once across multiple calls - AddTemporalServiceDefaults: registers meter and tracer provider config - Health check registered with correct connection-name-based key Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add missing CLI flags and update default image to 1.30.1 - Add --log-config support (WithLogConfig) - Add --search-attribute support (WithSearchAttribute, SearchAttributeType enum) - Add --ui-public-path support (WithUiPublicPath) - Update default image tag from 1.28.2-tctl-1.18.1-cli-1.1.1 to 1.30.1 - 84 tests passing (was 72) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add e2e integration tests using Aspire hosting - SearchAttributes_AreRegisteredOnServer: verifies WithSearchAttribute() registers custom search attributes (Keyword, Text, Bool, Datetime) on the Temporal server via the OperatorService API - Namespace_IsCreatedOnServer: verifies WithNamespace() creates custom namespaces accessible via DescribeNamespace - Uses DistributedApplicationTestingBuilder with a minimal TestAppHost - Non-proxied HTTP endpoint for direct gRPC access (bypasses TLS proxy) - 84 unit tests + 2 integration tests all passing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Export OTel from Temporal container to Aspire dashboard Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add missing CLI flags to README configuration reference Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add client library integration tests with real Aspire host Tests AddTemporalClient, AddTemporalWorker (all activity lifetime variants), ConfigureOptions, health check, and end-to-end workflow execution against a live Temporal dev server. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add client library integration tests with real Aspire host Tests AddTemporalClient, AddTemporalWorker (all activity lifetime variants), ConfigureOptions, health check, and end-to-end workflow execution against a live Temporal dev server. Also fixes resource name collisions across all integration tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix container WithServicePort/WithUiPort setting targetPort incorrectly WithServicePort and WithUiPort for containers were setting both endpoint.Port (host-side) and endpoint.TargetPort (container-internal) to the user value. The internal container port must remain fixed at 7233/8233 since the Temporal process always listens on its defaults. Only the external host port should change. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix Copilot review feedback: runtime wiring, health check dedup, WithUiPort safety - Wire TemporalRuntime into client connect options so CustomMetricMeter is actually used for metrics collection - Deduplicate health check registration when both AddTemporalClient and AddTemporalWorker are used with the same connection name - Make WithUiPort no-op instead of throwing when called after WithHeadlessUi (for both container and executable) - Clarify README port comments: WithServicePort/WithUiPort set external host port only, container internal ports are always fixed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix all build warnings: add XML doc comments, disambiguate cref, pass CancellationToken - Add XML doc comments to all public types (CS1591): annotations, enums, interfaces, resources - Fix ambiguous WithHeadlessUi cref references (CS0419) - Pass TestContext.Current.CancellationToken in integration tests (xUnit1051) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add param tags to records and primary constructors to fully resolve CS1591 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 89c6b53 commit 0e15ab5

55 files changed

Lines changed: 2737 additions & 689 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,4 +484,7 @@ $RECYCLE.BIN/
484484
*.swp
485485

486486
appsettings.Development.json
487-
temporal.sqlite
487+
temporal.sqlite
488+
489+
# Git worktrees
490+
.worktrees/

InfinityFlow.Aspire.Temporal.sln

Lines changed: 151 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,151 @@
1-
2-
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 17
4-
VisualStudioVersion = 17.0.31903.59
5-
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppHost", "sample\AppHost\AppHost.csproj", "{52057B80-B01E-46C3-96F5-228D0B3BCB48}"
7-
EndProject
8-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceDefaults", "sample\ServiceDefaults\ServiceDefaults.csproj", "{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}"
9-
EndProject
10-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sample", "sample", "{0815F1E4-424A-4A05-A12E-B2BDAF2AA142}"
11-
EndProject
12-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{70F8209F-4A68-4F27-AF37-3A76C8EA0642}"
13-
EndProject
14-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InfinityFlow.Aspire.Temporal", "src\InfinityFlow.Aspire.Temporal\InfinityFlow.Aspire.Temporal.csproj", "{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}"
15-
EndProject
16-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Api", "sample\Api\Api.csproj", "{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}"
17-
EndProject
18-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "sample\Worker\Worker.csproj", "{8B68A40A-674D-4989-B366-1EE0A633F0D9}"
19-
EndProject
20-
Global
21-
GlobalSection(SolutionConfigurationPlatforms) = preSolution
22-
Debug|Any CPU = Debug|Any CPU
23-
Release|Any CPU = Release|Any CPU
24-
EndGlobalSection
25-
GlobalSection(ProjectConfigurationPlatforms) = postSolution
26-
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27-
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|Any CPU.Build.0 = Debug|Any CPU
28-
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|Any CPU.ActiveCfg = Release|Any CPU
29-
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|Any CPU.Build.0 = Release|Any CPU
30-
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31-
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|Any CPU.Build.0 = Debug|Any CPU
32-
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|Any CPU.ActiveCfg = Release|Any CPU
33-
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|Any CPU.Build.0 = Release|Any CPU
34-
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
35-
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|Any CPU.Build.0 = Debug|Any CPU
36-
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|Any CPU.ActiveCfg = Release|Any CPU
37-
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|Any CPU.Build.0 = Release|Any CPU
38-
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39-
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
40-
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
41-
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|Any CPU.Build.0 = Release|Any CPU
42-
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
43-
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
44-
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
45-
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|Any CPU.Build.0 = Release|Any CPU
46-
EndGlobalSection
47-
GlobalSection(SolutionProperties) = preSolution
48-
HideSolutionNode = FALSE
49-
EndGlobalSection
50-
GlobalSection(NestedProjects) = preSolution
51-
{52057B80-B01E-46C3-96F5-228D0B3BCB48} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
52-
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
53-
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F} = {70F8209F-4A68-4F27-AF37-3A76C8EA0642}
54-
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
55-
{8B68A40A-674D-4989-B366-1EE0A633F0D9} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
56-
EndGlobalSection
57-
GlobalSection(ExtensibilityGlobals) = postSolution
58-
SolutionGuid = {C4C2C7A9-980A-4B6D-A624-60A0FBD99DE0}
59-
EndGlobalSection
60-
EndGlobal
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31903.59
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppHost", "sample\AppHost\AppHost.csproj", "{52057B80-B01E-46C3-96F5-228D0B3BCB48}"
7+
EndProject
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceDefaults", "sample\ServiceDefaults\ServiceDefaults.csproj", "{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}"
9+
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sample", "sample", "{0815F1E4-424A-4A05-A12E-B2BDAF2AA142}"
11+
EndProject
12+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{70F8209F-4A68-4F27-AF37-3A76C8EA0642}"
13+
EndProject
14+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InfinityFlow.Aspire.Temporal", "src\InfinityFlow.Aspire.Temporal\InfinityFlow.Aspire.Temporal.csproj", "{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}"
15+
EndProject
16+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Api", "sample\Api\Api.csproj", "{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}"
17+
EndProject
18+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "sample\Worker\Worker.csproj", "{8B68A40A-674D-4989-B366-1EE0A633F0D9}"
19+
EndProject
20+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
21+
EndProject
22+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InfinityFlow.Aspire.Temporal.Tests", "tests\InfinityFlow.Aspire.Temporal.Tests\InfinityFlow.Aspire.Temporal.Tests.csproj", "{4EEF5136-5452-4D0F-9766-B5080E885A20}"
23+
EndProject
24+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InfinityFlow.Aspire.Temporal.Client", "src\InfinityFlow.Aspire.Temporal.Client\InfinityFlow.Aspire.Temporal.Client.csproj", "{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}"
25+
EndProject
26+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAppHost", "tests\TestAppHost\TestAppHost.csproj", "{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}"
27+
EndProject
28+
Global
29+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
30+
Debug|Any CPU = Debug|Any CPU
31+
Debug|x64 = Debug|x64
32+
Debug|x86 = Debug|x86
33+
Release|Any CPU = Release|Any CPU
34+
Release|x64 = Release|x64
35+
Release|x86 = Release|x86
36+
EndGlobalSection
37+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
38+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|Any CPU.Build.0 = Debug|Any CPU
40+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|x64.ActiveCfg = Debug|Any CPU
41+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|x64.Build.0 = Debug|Any CPU
42+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|x86.ActiveCfg = Debug|Any CPU
43+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Debug|x86.Build.0 = Debug|Any CPU
44+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|Any CPU.ActiveCfg = Release|Any CPU
45+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|Any CPU.Build.0 = Release|Any CPU
46+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|x64.ActiveCfg = Release|Any CPU
47+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|x64.Build.0 = Release|Any CPU
48+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|x86.ActiveCfg = Release|Any CPU
49+
{52057B80-B01E-46C3-96F5-228D0B3BCB48}.Release|x86.Build.0 = Release|Any CPU
50+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
51+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|Any CPU.Build.0 = Debug|Any CPU
52+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|x64.ActiveCfg = Debug|Any CPU
53+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|x64.Build.0 = Debug|Any CPU
54+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|x86.ActiveCfg = Debug|Any CPU
55+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Debug|x86.Build.0 = Debug|Any CPU
56+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|Any CPU.ActiveCfg = Release|Any CPU
57+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|Any CPU.Build.0 = Release|Any CPU
58+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|x64.ActiveCfg = Release|Any CPU
59+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|x64.Build.0 = Release|Any CPU
60+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|x86.ActiveCfg = Release|Any CPU
61+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04}.Release|x86.Build.0 = Release|Any CPU
62+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
63+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|Any CPU.Build.0 = Debug|Any CPU
64+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|x64.ActiveCfg = Debug|Any CPU
65+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|x64.Build.0 = Debug|Any CPU
66+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|x86.ActiveCfg = Debug|Any CPU
67+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Debug|x86.Build.0 = Debug|Any CPU
68+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|Any CPU.ActiveCfg = Release|Any CPU
69+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|Any CPU.Build.0 = Release|Any CPU
70+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|x64.ActiveCfg = Release|Any CPU
71+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|x64.Build.0 = Release|Any CPU
72+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|x86.ActiveCfg = Release|Any CPU
73+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F}.Release|x86.Build.0 = Release|Any CPU
74+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
75+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
76+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|x64.ActiveCfg = Debug|Any CPU
77+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|x64.Build.0 = Debug|Any CPU
78+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|x86.ActiveCfg = Debug|Any CPU
79+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Debug|x86.Build.0 = Debug|Any CPU
80+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
81+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|Any CPU.Build.0 = Release|Any CPU
82+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|x64.ActiveCfg = Release|Any CPU
83+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|x64.Build.0 = Release|Any CPU
84+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|x86.ActiveCfg = Release|Any CPU
85+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B}.Release|x86.Build.0 = Release|Any CPU
86+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
87+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
88+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|x64.ActiveCfg = Debug|Any CPU
89+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|x64.Build.0 = Debug|Any CPU
90+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|x86.ActiveCfg = Debug|Any CPU
91+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Debug|x86.Build.0 = Debug|Any CPU
92+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
93+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|Any CPU.Build.0 = Release|Any CPU
94+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|x64.ActiveCfg = Release|Any CPU
95+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|x64.Build.0 = Release|Any CPU
96+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|x86.ActiveCfg = Release|Any CPU
97+
{8B68A40A-674D-4989-B366-1EE0A633F0D9}.Release|x86.Build.0 = Release|Any CPU
98+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
99+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Debug|Any CPU.Build.0 = Debug|Any CPU
100+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Debug|x64.ActiveCfg = Debug|Any CPU
101+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Debug|x64.Build.0 = Debug|Any CPU
102+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Debug|x86.ActiveCfg = Debug|Any CPU
103+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Debug|x86.Build.0 = Debug|Any CPU
104+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Release|Any CPU.ActiveCfg = Release|Any CPU
105+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Release|Any CPU.Build.0 = Release|Any CPU
106+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Release|x64.ActiveCfg = Release|Any CPU
107+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Release|x64.Build.0 = Release|Any CPU
108+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Release|x86.ActiveCfg = Release|Any CPU
109+
{4EEF5136-5452-4D0F-9766-B5080E885A20}.Release|x86.Build.0 = Release|Any CPU
110+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
111+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Debug|Any CPU.Build.0 = Debug|Any CPU
112+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Debug|x64.ActiveCfg = Debug|Any CPU
113+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Debug|x64.Build.0 = Debug|Any CPU
114+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Debug|x86.ActiveCfg = Debug|Any CPU
115+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Debug|x86.Build.0 = Debug|Any CPU
116+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Release|Any CPU.ActiveCfg = Release|Any CPU
117+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Release|Any CPU.Build.0 = Release|Any CPU
118+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Release|x64.ActiveCfg = Release|Any CPU
119+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Release|x64.Build.0 = Release|Any CPU
120+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Release|x86.ActiveCfg = Release|Any CPU
121+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21}.Release|x86.Build.0 = Release|Any CPU
122+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
123+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Debug|Any CPU.Build.0 = Debug|Any CPU
124+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Debug|x64.ActiveCfg = Debug|Any CPU
125+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Debug|x64.Build.0 = Debug|Any CPU
126+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Debug|x86.ActiveCfg = Debug|Any CPU
127+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Debug|x86.Build.0 = Debug|Any CPU
128+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Release|Any CPU.ActiveCfg = Release|Any CPU
129+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Release|Any CPU.Build.0 = Release|Any CPU
130+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Release|x64.ActiveCfg = Release|Any CPU
131+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Release|x64.Build.0 = Release|Any CPU
132+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Release|x86.ActiveCfg = Release|Any CPU
133+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33}.Release|x86.Build.0 = Release|Any CPU
134+
EndGlobalSection
135+
GlobalSection(SolutionProperties) = preSolution
136+
HideSolutionNode = FALSE
137+
EndGlobalSection
138+
GlobalSection(NestedProjects) = preSolution
139+
{52057B80-B01E-46C3-96F5-228D0B3BCB48} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
140+
{4B893ACC-7DDF-43CE-95A6-104CA8AEAB04} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
141+
{88EE3FBD-5AF8-4F75-A0C7-BC593EC8F90F} = {70F8209F-4A68-4F27-AF37-3A76C8EA0642}
142+
{1FFA9DCE-3368-4AFA-960A-0AD2C501CA1B} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
143+
{8B68A40A-674D-4989-B366-1EE0A633F0D9} = {0815F1E4-424A-4A05-A12E-B2BDAF2AA142}
144+
{4EEF5136-5452-4D0F-9766-B5080E885A20} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
145+
{C29E4F50-7D2A-4FF9-83B5-728A6EEC3F21} = {70F8209F-4A68-4F27-AF37-3A76C8EA0642}
146+
{D0F86CD9-CF13-4E27-BCAF-46847E8C7F33} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
147+
EndGlobalSection
148+
GlobalSection(ExtensibilityGlobals) = postSolution
149+
SolutionGuid = {C4C2C7A9-980A-4B6D-A624-60A0FBD99DE0}
150+
EndGlobalSection
151+
EndGlobal

0 commit comments

Comments
 (0)