DotNet Configuration Part 1
In this first part of the series I will show you an approach I have used successfully in managing configurations and secrets when building .net core apps
Spin up Visual studio and create a .net 6 core console app.
Add some appsettings.json file for environment specific variables
Then add an Item group to the project file and paste the following to nest the appsettings files
 <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
      <None Update="appsettings.Local.json">
        <DependentUpon>appsettings.json</DependentUpon>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </None>
    <None Update="appsettings.Docker.json">
      <DependentUpon>appsettings.json</DependentUpon>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>
Add the following variable to each of the files
appsettings.json -> "DemoUsername": "DefaultUserName"
appsettings.Docker.json -> "DemoUsername": "DockerUserName"
appsettings.Local.json -> "DemoUsername": "LocalUserName"
Open the properties of the project and navigate to Debug -> General -> Open debug launch profiles UI.
Add the following Environment Variable
DOTNET_ENVIRONMENT = Local
Close that UI and you should now have a properties folder with the launchSettings.json added.
Install the following Nuget packages
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.UserSecrets
- Microsoft.Extensions.Hosting
Then Select the project -> Manage User Secrets
This should open the secrets.json file that is unique to you. Add a variable to this file
{
"SecretPassword": "HelloFromUserSecrets"
}
Paste the following code into the program.cs
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Reflection;
using IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((context, config) =>
    {
        var settings = config.Build();
        var environmentName = context.HostingEnvironment.EnvironmentName;
        var isLocalEnv = environmentName == "Local" || environmentName == "Docker";
        if (isLocalEnv)
        {
            config.AddUserSecrets(Assembly.GetExecutingAssembly(), true);
        }
        else
        {
            //ToDo Add AZ App Configuraton
           
        }
    })
    .Build();
var config = host.Services.GetService<IConfiguration>();
Console.WriteLine("Username is - " + config.GetValue<string>("DemoUsername"));
Console.WriteLine("Password is - " + config.GetValue<string>("SecretPassword"));
Press F5 to run the project and you should see the variables printed out in the console window.