diff --git a/IdentityServer/v7/TokenExchange/Client/Client.csproj b/IdentityServer/v7/TokenExchange/Client/Client.csproj index df7831cf..f5582393 100644 --- a/IdentityServer/v7/TokenExchange/Client/Client.csproj +++ b/IdentityServer/v7/TokenExchange/Client/Client.csproj @@ -7,6 +7,6 @@ - + diff --git a/IdentityServer/v7/TokenExchange/Client/TokenResponseExtensions.cs b/IdentityServer/v7/TokenExchange/Client/TokenResponseExtensions.cs index 680e8c8d..9da417ff 100644 --- a/IdentityServer/v7/TokenExchange/Client/TokenResponseExtensions.cs +++ b/IdentityServer/v7/TokenExchange/Client/TokenResponseExtensions.cs @@ -1,6 +1,7 @@ // Copyright (c) Duende Software. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using System.Buffers.Text; using System.Diagnostics; using System.Text; using System.Text.Json; @@ -26,8 +27,8 @@ public static void Show(this TokenResponse response) var header = parts[0]; var claims = parts[1]; - Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.Decode(header)))); - Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.Decode(claims)))); + Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.DecodeFromChars(header)))); + Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.DecodeFromChars(claims)))); } } else diff --git a/IdentityServer/v7/TokenExchange/IdentityServerHost/IdentityServerHost.csproj b/IdentityServer/v7/TokenExchange/IdentityServerHost/IdentityServerHost.csproj index 0b08b62c..17c7b763 100644 --- a/IdentityServer/v7/TokenExchange/IdentityServerHost/IdentityServerHost.csproj +++ b/IdentityServer/v7/TokenExchange/IdentityServerHost/IdentityServerHost.csproj @@ -7,6 +7,9 @@ - + + + + diff --git a/IdentityServer/v7/TokenExchange/IdentityServerHost/Program.cs b/IdentityServer/v7/TokenExchange/IdentityServerHost/Program.cs index b655fe29..e68eaefb 100644 --- a/IdentityServer/v7/TokenExchange/IdentityServerHost/Program.cs +++ b/IdentityServer/v7/TokenExchange/IdentityServerHost/Program.cs @@ -4,20 +4,12 @@ using IdentityServerHost; using Microsoft.AspNetCore.DataProtection; -using Serilog; -using Serilog.Sinks.SystemConsole.Themes; Console.Title = "IdentityServer"; -Log.Logger = new LoggerConfiguration() - .MinimumLevel.Information() - .Enrich.FromLogContext() - .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) - .CreateLogger(); - var builder = WebApplication.CreateBuilder(args); -builder.Services.AddSerilog(); +builder.AddServiceDefaults(); var idsvrBuilder = builder.Services.AddIdentityServer() .AddInMemoryApiScopes(Config.Scopes) @@ -36,6 +28,8 @@ var app = builder.Build(); +app.MapDefaultEndpoints(); + app.UseDeveloperExceptionPage(); app.UseIdentityServer(); diff --git a/IdentityServer/v7/TokenExchange/README.md b/IdentityServer/v7/TokenExchange/README.md new file mode 100644 index 00000000..1094b9dc --- /dev/null +++ b/IdentityServer/v7/TokenExchange/README.md @@ -0,0 +1,5 @@ +**Token Exchange Sample** +  + This sample requires multiple projects to be run at once. That can easily be done by running the included Aspire AppHost. The Aspire dashboard will show the status of all running applications and show you the links to the running applications. Aspire will also collect the Open Telemetry data (logs, metrics, traces) and make it available on the dashboard. +For the included console application please look at the output of your IDE to see the results. +  diff --git a/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/AppHost.cs b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/AppHost.cs new file mode 100644 index 00000000..d6c5d32a --- /dev/null +++ b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/AppHost.cs @@ -0,0 +1,7 @@ +var builder = DistributedApplication.CreateBuilder(args); + +var idsrv = builder.AddProject("identityserverhost"); +builder.AddProject("client") + .WaitFor(idsrv); + +builder.Build().Run(); diff --git a/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/Properties/launchSettings.json b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/Properties/launchSettings.json new file mode 100644 index 00000000..af39238b --- /dev/null +++ b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17036;http://localhost:15277", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21012", + "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "https://localhost:23192", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22249" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15277", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19284", + "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "http://localhost:18147", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20272" + } + } + } +} diff --git a/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/TokenExchange.AppHost.csproj b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/TokenExchange.AppHost.csproj new file mode 100644 index 00000000..7c20cbd5 --- /dev/null +++ b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/TokenExchange.AppHost.csproj @@ -0,0 +1,16 @@ + + + + Exe + net10.0 + enable + enable + 7345a95a-3a14-4c9b-985a-1dac550f4368 + + + + + + + + diff --git a/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/appsettings.Development.json b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/appsettings.json b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/appsettings.json new file mode 100644 index 00000000..31c092aa --- /dev/null +++ b/IdentityServer/v7/TokenExchange/TokenExchange.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/IdentityServer/v7/TokenExchange/TokenExchange.sln b/IdentityServer/v7/TokenExchange/TokenExchange.sln index 1964e44e..9ce985ba 100755 --- a/IdentityServer/v7/TokenExchange/TokenExchange.sln +++ b/IdentityServer/v7/TokenExchange/TokenExchange.sln @@ -7,6 +7,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServerHost", "Ident EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{93B5DD40-6D86-4E99-AA89-CBB41F70E40F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TokenExchange.AppHost", "TokenExchange.AppHost\TokenExchange.AppHost.csproj", "{EB806040-C123-4877-BE99-8EAE9C8FFAA8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.ServiceDefaults", "..\Aspire.ServiceDefaults\Aspire.ServiceDefaults.csproj", "{F85570AF-140B-4006-94DC-2D6DFD7B3231}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -41,6 +45,30 @@ Global {93B5DD40-6D86-4E99-AA89-CBB41F70E40F}.Release|x64.Build.0 = Release|Any CPU {93B5DD40-6D86-4E99-AA89-CBB41F70E40F}.Release|x86.ActiveCfg = Release|Any CPU {93B5DD40-6D86-4E99-AA89-CBB41F70E40F}.Release|x86.Build.0 = Release|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Debug|x64.ActiveCfg = Debug|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Debug|x64.Build.0 = Debug|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Debug|x86.ActiveCfg = Debug|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Debug|x86.Build.0 = Debug|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Release|Any CPU.Build.0 = Release|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Release|x64.ActiveCfg = Release|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Release|x64.Build.0 = Release|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Release|x86.ActiveCfg = Release|Any CPU + {EB806040-C123-4877-BE99-8EAE9C8FFAA8}.Release|x86.Build.0 = Release|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Debug|x64.ActiveCfg = Debug|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Debug|x64.Build.0 = Debug|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Debug|x86.ActiveCfg = Debug|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Debug|x86.Build.0 = Debug|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Release|Any CPU.Build.0 = Release|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Release|x64.ActiveCfg = Release|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Release|x64.Build.0 = Release|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Release|x86.ActiveCfg = Release|Any CPU + {F85570AF-140B-4006-94DC-2D6DFD7B3231}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IdentityServer/v8/TokenExchange/IdentityServerHost/IdentityServerHost.csproj b/IdentityServer/v8/TokenExchange/IdentityServerHost/IdentityServerHost.csproj index a28de961..3b532ccf 100644 --- a/IdentityServer/v8/TokenExchange/IdentityServerHost/IdentityServerHost.csproj +++ b/IdentityServer/v8/TokenExchange/IdentityServerHost/IdentityServerHost.csproj @@ -7,6 +7,9 @@ - + + + + diff --git a/IdentityServer/v8/TokenExchange/IdentityServerHost/Program.cs b/IdentityServer/v8/TokenExchange/IdentityServerHost/Program.cs index b655fe29..53ad63eb 100644 --- a/IdentityServer/v8/TokenExchange/IdentityServerHost/Program.cs +++ b/IdentityServer/v8/TokenExchange/IdentityServerHost/Program.cs @@ -4,20 +4,12 @@ using IdentityServerHost; using Microsoft.AspNetCore.DataProtection; -using Serilog; -using Serilog.Sinks.SystemConsole.Themes; Console.Title = "IdentityServer"; -Log.Logger = new LoggerConfiguration() - .MinimumLevel.Information() - .Enrich.FromLogContext() - .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) - .CreateLogger(); - var builder = WebApplication.CreateBuilder(args); -builder.Services.AddSerilog(); +builder.AddServiceDefaults(); var idsvrBuilder = builder.Services.AddIdentityServer() .AddInMemoryApiScopes(Config.Scopes) @@ -38,6 +30,7 @@ app.UseDeveloperExceptionPage(); +app.MapDefaultEndpoints(); app.UseIdentityServer(); app.Run(); diff --git a/IdentityServer/v8/TokenExchange/README.md b/IdentityServer/v8/TokenExchange/README.md new file mode 100644 index 00000000..1094b9dc --- /dev/null +++ b/IdentityServer/v8/TokenExchange/README.md @@ -0,0 +1,5 @@ +**Token Exchange Sample** +  + This sample requires multiple projects to be run at once. That can easily be done by running the included Aspire AppHost. The Aspire dashboard will show the status of all running applications and show you the links to the running applications. Aspire will also collect the Open Telemetry data (logs, metrics, traces) and make it available on the dashboard. +For the included console application please look at the output of your IDE to see the results. +  diff --git a/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/AppHost.cs b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/AppHost.cs new file mode 100644 index 00000000..d6c5d32a --- /dev/null +++ b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/AppHost.cs @@ -0,0 +1,7 @@ +var builder = DistributedApplication.CreateBuilder(args); + +var idsrv = builder.AddProject("identityserverhost"); +builder.AddProject("client") + .WaitFor(idsrv); + +builder.Build().Run(); diff --git a/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/Properties/launchSettings.json b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/Properties/launchSettings.json new file mode 100644 index 00000000..af39238b --- /dev/null +++ b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17036;http://localhost:15277", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21012", + "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "https://localhost:23192", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22249" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15277", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19284", + "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "http://localhost:18147", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20272" + } + } + } +} diff --git a/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/TokenExchange.AppHost.csproj b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/TokenExchange.AppHost.csproj new file mode 100644 index 00000000..7c20cbd5 --- /dev/null +++ b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/TokenExchange.AppHost.csproj @@ -0,0 +1,16 @@ + + + + Exe + net10.0 + enable + enable + 7345a95a-3a14-4c9b-985a-1dac550f4368 + + + + + + + + diff --git a/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/appsettings.Development.json b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/appsettings.json b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/appsettings.json new file mode 100644 index 00000000..31c092aa --- /dev/null +++ b/IdentityServer/v8/TokenExchange/TokenExchange.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/IdentityServer/v8/TokenExchange/TokenExchange.sln b/IdentityServer/v8/TokenExchange/TokenExchange.sln index 1964e44e..1a365c3d 100755 --- a/IdentityServer/v8/TokenExchange/TokenExchange.sln +++ b/IdentityServer/v8/TokenExchange/TokenExchange.sln @@ -7,6 +7,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServerHost", "Ident EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{93B5DD40-6D86-4E99-AA89-CBB41F70E40F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TokenExchange.AppHost", "TokenExchange.AppHost\TokenExchange.AppHost.csproj", "{E90D42B7-BC5B-498C-A667-70F90E8A03CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.ServiceDefaults", "..\Aspire.ServiceDefaults\Aspire.ServiceDefaults.csproj", "{D312D120-217B-4BF2-ADA8-9AEC3BEED25C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -41,6 +45,30 @@ Global {93B5DD40-6D86-4E99-AA89-CBB41F70E40F}.Release|x64.Build.0 = Release|Any CPU {93B5DD40-6D86-4E99-AA89-CBB41F70E40F}.Release|x86.ActiveCfg = Release|Any CPU {93B5DD40-6D86-4E99-AA89-CBB41F70E40F}.Release|x86.Build.0 = Release|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Debug|x64.ActiveCfg = Debug|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Debug|x64.Build.0 = Debug|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Debug|x86.ActiveCfg = Debug|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Debug|x86.Build.0 = Debug|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Release|Any CPU.Build.0 = Release|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Release|x64.ActiveCfg = Release|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Release|x64.Build.0 = Release|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Release|x86.ActiveCfg = Release|Any CPU + {E90D42B7-BC5B-498C-A667-70F90E8A03CC}.Release|x86.Build.0 = Release|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Debug|x64.ActiveCfg = Debug|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Debug|x64.Build.0 = Debug|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Debug|x86.ActiveCfg = Debug|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Debug|x86.Build.0 = Debug|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Release|Any CPU.Build.0 = Release|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Release|x64.ActiveCfg = Release|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Release|x64.Build.0 = Release|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Release|x86.ActiveCfg = Release|Any CPU + {D312D120-217B-4BF2-ADA8-9AEC3BEED25C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples.slnx b/samples.slnx index 681437eb..04f07c28 100644 --- a/samples.slnx +++ b/samples.slnx @@ -295,6 +295,7 @@ + @@ -498,6 +499,7 @@ +