Skip to content

Commit

Permalink
Add Response Headers to Pipeline (#79)
Browse files Browse the repository at this point in the history
* Fixed typos in docs
* Added output headers to pipeline
* Split out request and response custom enums and code
* Added response header test
* Updated header sample
* Split out samples to separate solution
* Fixed samples build path
  • Loading branch information
mikaelweave authored Oct 13, 2022
1 parent be29fc6 commit 06cdc92
Show file tree
Hide file tree
Showing 35 changed files with 330 additions and 119 deletions.
9 changes: 8 additions & 1 deletion .azdo/pipelines/jobs/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,14 @@ steps:
command: 'build'
arguments: '--configuration $(buildConfiguration) --no-incremental'
projects: '**/Microsoft.AzureHealth.DataServices.*.csproj'
displayName: 'Build all projects'
displayName: 'Build toolkit projects'

- task: DotNetCoreCLI@2
inputs:
command: 'build'
arguments: '--configuration $(buildConfiguration) --no-incremental'
projects: '**/samples/**/*.csproj'
displayName: 'Build samples projects'

# Test skip to support building multiple versions
- task: DotNetCoreCLI@2
Expand Down
9 changes: 8 additions & 1 deletion .azdo/pipelines/jobs/checkCode.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,19 @@ steps:
arguments: 'update -g dotnet-format'

- task: DotNetCoreCLI@2
displayName: 'Lint with dotnet format'
displayName: 'Lint Toolkit'
inputs:
command: 'custom'
custom: 'format'
arguments: 'Microsoft.AzureHealth.DataServices.Toolkit.sln --verify-no-changes --verbosity diagnostic'

- task: DotNetCoreCLI@2
displayName: 'Lint Toolkit'
inputs:
command: 'custom'
custom: 'format'
arguments: 'samples/Samples.sln --verify-no-changes --verbosity diagnostic'

- task: CredScan@3
inputs:
outputFormat: 'csv'
Expand Down
16 changes: 1 addition & 15 deletions Microsoft.AzureHealth.DataServices.Toolkit.sln
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AzureHealth.DataS
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AzureHealth.DataServices.Tests", "tests\Microsoft.AzureHealth.DataServices.Tests\Microsoft.AzureHealth.DataServices.Tests.csproj", "{529399A1-8363-4498-8770-0B053ADC9B80}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuickstartSample", "samples\Quickstart\src\QuickstartSample.csproj", "{A5859820-6DA2-43A8-9AA1-0CD60B9BDA7B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{55081F1E-460D-4D6F-92CA-EB8A0C7CD33C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{90B392B4-BC7D-4221-BCD0-FF6FF04EAB56}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C28090B7-2D76-46A9-AFF1-6F8CAB453A37}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuickstartSample.Tests", "samples\Quickstart\tests\QuickstartSample.Tests.csproj", "{A93551E2-0ACA-4C0E-9FBA-CD1A7BAA191B}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "zsamples", "zsamples", "{C28090B7-2D76-46A9-AFF1-6F8CAB453A37}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthenticatorSample", "samples\FeatureSamples\Authenticator\AuthenticatorSample.csproj", "{C9A997BE-A480-479A-B32B-E9407072EF83}"
EndProject
Expand Down Expand Up @@ -82,14 +78,6 @@ Global
{529399A1-8363-4498-8770-0B053ADC9B80}.Debug|Any CPU.Build.0 = Debug|Any CPU
{529399A1-8363-4498-8770-0B053ADC9B80}.Release|Any CPU.ActiveCfg = Release|Any CPU
{529399A1-8363-4498-8770-0B053ADC9B80}.Release|Any CPU.Build.0 = Release|Any CPU
{A5859820-6DA2-43A8-9AA1-0CD60B9BDA7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5859820-6DA2-43A8-9AA1-0CD60B9BDA7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5859820-6DA2-43A8-9AA1-0CD60B9BDA7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5859820-6DA2-43A8-9AA1-0CD60B9BDA7B}.Release|Any CPU.Build.0 = Release|Any CPU
{A93551E2-0ACA-4C0E-9FBA-CD1A7BAA191B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A93551E2-0ACA-4C0E-9FBA-CD1A7BAA191B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A93551E2-0ACA-4C0E-9FBA-CD1A7BAA191B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A93551E2-0ACA-4C0E-9FBA-CD1A7BAA191B}.Release|Any CPU.Build.0 = Release|Any CPU
{C9A997BE-A480-479A-B32B-E9407072EF83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9A997BE-A480-479A-B32B-E9407072EF83}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9A997BE-A480-479A-B32B-E9407072EF83}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -148,8 +136,6 @@ Global
{870E4E6B-ACF8-4804-8C31-ABA81DF3FB92} = {55081F1E-460D-4D6F-92CA-EB8A0C7CD33C}
{2397561E-A1A6-4946-9C09-ABBA688643FE} = {55081F1E-460D-4D6F-92CA-EB8A0C7CD33C}
{529399A1-8363-4498-8770-0B053ADC9B80} = {90B392B4-BC7D-4221-BCD0-FF6FF04EAB56}
{A5859820-6DA2-43A8-9AA1-0CD60B9BDA7B} = {C28090B7-2D76-46A9-AFF1-6F8CAB453A37}
{A93551E2-0ACA-4C0E-9FBA-CD1A7BAA191B} = {C28090B7-2D76-46A9-AFF1-6F8CAB453A37}
{C9A997BE-A480-479A-B32B-E9407072EF83} = {8BE57ED6-C768-4D79-92F0-7F40198FC9B6}
{F034AA50-BB9C-43AA-91D7-9DBC16E917B6} = {8BE57ED6-C768-4D79-92F0-7F40198FC9B6}
{E0AA886C-98B3-4532-BB93-75E8F0D99DC0} = {8BE57ED6-C768-4D79-92F0-7F40198FC9B6}
Expand Down
2 changes: 1 addition & 1 deletion samples/FeatureSamples/CustomHeaders/MyService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public MyService(IHttpCustomHeaderCollection customHeaders)

public NameValueCollection GetCustomHeaders(HttpRequestMessage message)
{
return customHeaders.AppendAndReplace(message);
return customHeaders.RequestAppendAndReplace(message);
}
}
}
20 changes: 12 additions & 8 deletions samples/FeatureSamples/CustomHeaders/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,20 @@
// Inform the pipeline that we are using Custom Headers
services.UseCustomHeaders();

// Static headers are always added
services.AddCustomHeader("X-ServiceSource", "CustomHeaderTest", CustomHeaderType.Static);
services.AddCustomHeader("X-EnvironmentName", environmentName, CustomHeaderType.Static);
// Request static headers are always added to requests
services.AddCustomHeader("X-ServiceSource", "CustomHeaderTest", CustomHeaderType.RequestStatic);
services.AddCustomHeader("X-EnvironmentName", environmentName, CustomHeaderType.RequestStatic);

// Request headers are only added if the headers exists on the request
services.AddCustomHeader("X-Custom-Location", "X-FHIR-Location", CustomHeaderType.Request);
services.AddCustomHeader("X-Custom-Geo", "X-FHIR-Geography", CustomHeaderType.Request);
// Request match headers are only added if the headers exists on the request
services.AddCustomHeader("X-Custom-Location", "X-FHIR-Location", CustomHeaderType.RequestMatch);
services.AddCustomHeader("X-Custom-Geo", "X-FHIR-Geography", CustomHeaderType.RequestMatch);

// The "name" claim will be extracted and mapped to the "X-MS-Test" header on requests
services.AddCustomHeader("X-MS-TEST", "name", CustomHeaderType.RequestIdentity);

// Response static headers are always added on the response
services.AddCustomHeader("X-MS-Proxy", "Azure Health Data Services Toolkit", CustomHeaderType.ResponseStatic);

// The "name" claim will be extracted and mapped to the "X-MS-Test" header
services.AddCustomHeader("X-MS-TEST", "name", CustomHeaderType.Identity);
services.AddSingleton<IMyService, MyService>();
});

Expand Down
13 changes: 8 additions & 5 deletions samples/FeatureSamples/CustomHeaders/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Injecting Custom Headers into your Custom Operations

This sample shows you how to work with the custom header utilities in the Azure Health Data Services toolkit. We'll cover the three different types of headers modifications in this sample.
This sample shows you how to work with the custom header utilities in the Azure Health Data Services Toolkit. We'll cover the four different types of headers modifications in this sample.

This sample doesn't contain a full custom operation pipeline, but is scoped to headers only.

Expand All @@ -11,11 +11,14 @@ This sample doesn't require any setup or any access to Azure Resources because i
This sample covers the following concepts:

- Header modification service configuration.
- Static headers which are always injected into the request.
- Request headers which are injected if the header exists on the request.
- Identity headers which inject a header from a claim in an bearer token.
- Request static headers which are always injected into the request.
- Request match headers which are injected if the header exists on the request.
- Request identity headers which inject a header from a claim in a request bearer token.
- Response static headers which are always injected into the response.

Header modification is useful when you want to log information from the incoming request, especially using the [header logging capabilities](https://docs.microsoft.com//azure/healthcare-apis/azure-api-for-fhir/use-custom-headers) in the FHIR service.
Request header modifications are useful when you want to log information from the incoming request, especially using the [header logging capabilities](https://docs.microsoft.com//azure/healthcare-apis/azure-api-for-fhir/use-custom-headers) in the FHIR service.

Response header modifications are useful when you want to return headers to the requesting client.

## Prerequisites

Expand Down
2 changes: 1 addition & 1 deletion samples/FeatureSamples/EventGridChannel/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Sending Data to Event Grid in a Channel

This sample shows you how you can send data to Azure Event Grid using a channel in the Azure Health Data Services toolkit. This is useful for notifying other systems of data in your pipelines.
This sample shows you how you can send data to Azure Event Grid using a channel in the Azure Health Data Services Toolkit. This is useful for notifying other systems of data in your pipelines.

## Concepts

Expand Down
2 changes: 1 addition & 1 deletion samples/FeatureSamples/EventHubChannel/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Sending/Receiving Data with Event Hubs Channel

This sample shows you how you can *send and receive* data to/from Azure Event Hubs using a channel in the Azure Health Data Services toolkit. This is useful for notifying other systems of data in your pipelines or receiving data from other services.
This sample shows you how you can *send and receive* data to/from Azure Event Hubs using a channel in the Azure Health Data Services Toolkit. This is useful for notifying other systems of data in your pipelines or receiving data from other services.

## Concepts

Expand Down
2 changes: 1 addition & 1 deletion samples/FeatureSamples/JsonTransform/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Transforming Data with JsonTransform

This sample shows you how to work with the JSON transformation utilities in the Azure Health Data Services toolkit. We'll show a simple example of how you can easily modify JSON data (usually HTTP request or response data) as part of a filter in your custom operations.
This sample shows you how to work with the JSON transformation utilities in the Azure Health Data Services Toolkit. We'll show a simple example of how you can easily modify JSON data (usually HTTP request or response data) as part of a filter in your custom operations.

This sample doesn't contain a full custom operation pipeline, but is scoped to JSON transforms only.

Expand Down
2 changes: 1 addition & 1 deletion samples/FeatureSamples/ServiceBusChannel/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Sending/Receiving Data with a Service Bus Channel

This sample shows you how you can *send and receive* data to/from Azure Service Bus using a channel in the Azure Health Data Services toolkit. This is useful for notifying other systems of data in your pipelines or receiving data from other services.
This sample shows you how you can *send and receive* data to/from Azure Service Bus using a channel in the Azure Health Data Services Toolkit. This is useful for notifying other systems of data in your pipelines or receiving data from other services.

## Concepts

Expand Down
99 changes: 99 additions & 0 deletions samples/Samples.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31717.71
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1446E87B-70C4-4A68-8078-67AFF37B56FB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthenticatorSample", "FeatureSamples\Authenticator\AuthenticatorSample.csproj", "{2901E8F9-680A-403B-823E-9F1055DC5014}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlobChannelSample", "FeatureSamples\BlobChannel\BlobChannelSample.csproj", "{7A7AF5C3-3817-41E8-8C92-DC1E4B2CA25B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomHeadersSample", "FeatureSamples\CustomHeaders\CustomHeadersSample.csproj", "{FF441F7A-3FE9-4CB5-BB1F-35D53C83B64B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventGridChannelSample", "FeatureSamples\EventGridChannel\EventGridChannelSample.csproj", "{ABAC7DB3-8162-405F-9EA9-3687E6D6A55C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventHubChannelSample", "FeatureSamples\EventHubChannel\EventHubChannelSample.csproj", "{4DF14E5B-DB05-4EEC-BC26-B67D2626E20E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonTransformSample", "FeatureSamples\JsonTransform\JsonTransformSample.csproj", "{47E0ABD8-D96B-4136-9166-F3F29BB481BF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemoryCacheAndBlobProviderSample", "FeatureSamples\MemoryCacheAndBlobProvider\MemoryCacheAndBlobProviderSample.csproj", "{B4FF340E-60C5-4470-BE2F-1428FB85868B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemoryCacheAndRedisProviderSample", "FeatureSamples\MemoryCacheAndRedisProvider\MemoryCacheAndRedisProviderSample.csproj", "{1ABCE629-5AF1-48B0-913E-56B321A57F82}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceBusChannelSample", "FeatureSamples\ServiceBusChannel\ServiceBusChannelSample.csproj", "{978DFB85-D31A-4B0C-AFCE-1EC218F919B6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SimpleExternalApiCustomOperationSample", "SimpleExternalApiCustomOperationSample", "{2EE44AE9-A3BC-4E6E-85F9-F49727E1430C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "FeatureSamples\SimpleExternalApiCustomOperation\Shared\Shared.csproj", "{B9A20E5E-3590-4520-9B0B-9BE1DD0877BD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleCustomOperation", "FeatureSamples\SimpleExternalApiCustomOperation\SimpleCustomOperation\SimpleCustomOperation.csproj", "{8B7A7D56-53E2-4E15-B9B1-456918B03AE5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleExternalApi", "FeatureSamples\SimpleExternalApiCustomOperation\SimpleWebApi\SimpleExternalApi.csproj", "{A5408F9E-5A23-4F2D-8CA6-8BB35C97CA34}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2901E8F9-680A-403B-823E-9F1055DC5014}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2901E8F9-680A-403B-823E-9F1055DC5014}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2901E8F9-680A-403B-823E-9F1055DC5014}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2901E8F9-680A-403B-823E-9F1055DC5014}.Release|Any CPU.Build.0 = Release|Any CPU
{7A7AF5C3-3817-41E8-8C92-DC1E4B2CA25B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A7AF5C3-3817-41E8-8C92-DC1E4B2CA25B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A7AF5C3-3817-41E8-8C92-DC1E4B2CA25B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A7AF5C3-3817-41E8-8C92-DC1E4B2CA25B}.Release|Any CPU.Build.0 = Release|Any CPU
{FF441F7A-3FE9-4CB5-BB1F-35D53C83B64B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF441F7A-3FE9-4CB5-BB1F-35D53C83B64B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF441F7A-3FE9-4CB5-BB1F-35D53C83B64B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF441F7A-3FE9-4CB5-BB1F-35D53C83B64B}.Release|Any CPU.Build.0 = Release|Any CPU
{ABAC7DB3-8162-405F-9EA9-3687E6D6A55C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ABAC7DB3-8162-405F-9EA9-3687E6D6A55C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ABAC7DB3-8162-405F-9EA9-3687E6D6A55C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ABAC7DB3-8162-405F-9EA9-3687E6D6A55C}.Release|Any CPU.Build.0 = Release|Any CPU
{4DF14E5B-DB05-4EEC-BC26-B67D2626E20E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4DF14E5B-DB05-4EEC-BC26-B67D2626E20E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4DF14E5B-DB05-4EEC-BC26-B67D2626E20E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4DF14E5B-DB05-4EEC-BC26-B67D2626E20E}.Release|Any CPU.Build.0 = Release|Any CPU
{47E0ABD8-D96B-4136-9166-F3F29BB481BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{47E0ABD8-D96B-4136-9166-F3F29BB481BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{47E0ABD8-D96B-4136-9166-F3F29BB481BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{47E0ABD8-D96B-4136-9166-F3F29BB481BF}.Release|Any CPU.Build.0 = Release|Any CPU
{B4FF340E-60C5-4470-BE2F-1428FB85868B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B4FF340E-60C5-4470-BE2F-1428FB85868B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B4FF340E-60C5-4470-BE2F-1428FB85868B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B4FF340E-60C5-4470-BE2F-1428FB85868B}.Release|Any CPU.Build.0 = Release|Any CPU
{1ABCE629-5AF1-48B0-913E-56B321A57F82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1ABCE629-5AF1-48B0-913E-56B321A57F82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1ABCE629-5AF1-48B0-913E-56B321A57F82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1ABCE629-5AF1-48B0-913E-56B321A57F82}.Release|Any CPU.Build.0 = Release|Any CPU
{978DFB85-D31A-4B0C-AFCE-1EC218F919B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{978DFB85-D31A-4B0C-AFCE-1EC218F919B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{978DFB85-D31A-4B0C-AFCE-1EC218F919B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{978DFB85-D31A-4B0C-AFCE-1EC218F919B6}.Release|Any CPU.Build.0 = Release|Any CPU
{B9A20E5E-3590-4520-9B0B-9BE1DD0877BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B9A20E5E-3590-4520-9B0B-9BE1DD0877BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B9A20E5E-3590-4520-9B0B-9BE1DD0877BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B9A20E5E-3590-4520-9B0B-9BE1DD0877BD}.Release|Any CPU.Build.0 = Release|Any CPU
{8B7A7D56-53E2-4E15-B9B1-456918B03AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B7A7D56-53E2-4E15-B9B1-456918B03AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B7A7D56-53E2-4E15-B9B1-456918B03AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B7A7D56-53E2-4E15-B9B1-456918B03AE5}.Release|Any CPU.Build.0 = Release|Any CPU
{A5408F9E-5A23-4F2D-8CA6-8BB35C97CA34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5408F9E-5A23-4F2D-8CA6-8BB35C97CA34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5408F9E-5A23-4F2D-8CA6-8BB35C97CA34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5408F9E-5A23-4F2D-8CA6-8BB35C97CA34}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{B9A20E5E-3590-4520-9B0B-9BE1DD0877BD} = {2EE44AE9-A3BC-4E6E-85F9-F49727E1430C}
{8B7A7D56-53E2-4E15-B9B1-456918B03AE5} = {2EE44AE9-A3BC-4E6E-85F9-F49727E1430C}
{A5408F9E-5A23-4F2D-8CA6-8BB35C97CA34} = {2EE44AE9-A3BC-4E6E-85F9-F49727E1430C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {94F0FA02-D7FC-49A9-B186-55D81545BC30}
EndGlobalSection
EndGlobal
Loading

0 comments on commit 06cdc92

Please sign in to comment.