Skip to content

Commit

Permalink
add support for appsettings.json
Browse files Browse the repository at this point in the history
  • Loading branch information
dansiegel committed Jul 4, 2021
1 parent 9f5ca05 commit 4578952
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 8 deletions.
4 changes: 4 additions & 0 deletions src/Mobile.BuildTools.Reference/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
{
public static class Constants
{
public const string AppSettingsJsonFileName = "appsettings.json";

public const string AppSettingsJsonConfigurationFileFormat = "appsettings.{0}.json";

public const string SecretsJsonFileName = "secrets.json";

public const string SecretsJsonConfigurationFileFormat = "secrets.{0}.json";
Expand Down
58 changes: 50 additions & 8 deletions src/Mobile.BuildTools.Reference/Utils/EnvironmentAnalyzer.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
Expand All @@ -17,21 +18,45 @@ public static class EnvironmentAnalyzer
public static IDictionary<string, string> GatherEnvironmentVariables(IBuildConfiguration buildConfiguration = null, bool includeManifest = false)
{
var env = new Dictionary<string, string>();
foreach(var key in Environment.GetEnvironmentVariables().Keys)
if(buildConfiguration is null)
{
env.Add(key.ToString(), Environment.GetEnvironmentVariable(key.ToString()));
foreach (var key in Environment.GetEnvironmentVariables().Keys)
{
env[key.ToString()] = Environment.GetEnvironmentVariable(key.ToString());
}

return env;
}

if (buildConfiguration is null)
return env;
LoadConfigurationEnvironment(buildConfiguration, ref env);

foreach(var key in Environment.GetEnvironmentVariables().Keys)
{
env[key.ToString()] = Environment.GetEnvironmentVariable(key.ToString());
}

var projectDirectory = buildConfiguration.ProjectDirectory;
var solutionDirectory = buildConfiguration.SolutionDirectory;
var configuration = buildConfiguration.BuildConfiguration;
LoadSecrets(Path.Combine(projectDirectory, Constants.SecretsJsonFileName), ref env);
LoadSecrets(Path.Combine(projectDirectory, string.Format(Constants.SecretsJsonConfigurationFileFormat, configuration)), ref env);
LoadSecrets(Path.Combine(solutionDirectory, Constants.SecretsJsonFileName), ref env);
LoadSecrets(Path.Combine(solutionDirectory, string.Format(Constants.SecretsJsonConfigurationFileFormat, configuration)), ref env);
new[]
{
Path.Combine(projectDirectory, Constants.AppSettingsJsonFileName),
Path.Combine(projectDirectory, string.Format(Constants.AppSettingsJsonConfigurationFileFormat, configuration)),
Path.Combine(solutionDirectory, Constants.AppSettingsJsonFileName),
Path.Combine(solutionDirectory, string.Format(Constants.AppSettingsJsonConfigurationFileFormat, configuration)),
// Legacy Support
Path.Combine(projectDirectory, Constants.SecretsJsonFileName),
Path.Combine(projectDirectory, string.Format(Constants.SecretsJsonConfigurationFileFormat, configuration)),
Path.Combine(solutionDirectory, Constants.SecretsJsonFileName),
Path.Combine(solutionDirectory, string.Format(Constants.SecretsJsonConfigurationFileFormat, configuration))
}.Distinct()
.ForEach(x =>
{
if (Path.GetFileName(x).StartsWith("secrets") && File.Exists(x))
buildConfiguration.Logger.LogWarning("The secrets.json has been deprecated and will no longer be supported in a future version. Please migrate to appsettings.json");
LoadSecrets(x, ref env);
});

if (includeManifest)
{
Expand All @@ -55,6 +80,23 @@ public static IDictionary<string, string> GatherEnvironmentVariables(IBuildConfi
return env;
}

private static void LoadConfigurationEnvironment(IBuildConfiguration buildConfiguration, ref Dictionary<string, string> env)
{
var config = buildConfiguration.Configuration;
foreach ((var key, var value) in config.Environment.Defaults)
{
env[key] = value;
}

if(config.Environment.Configuration.ContainsKey(buildConfiguration.BuildConfiguration))
{
foreach ((var key, var value) in config.Environment.Configuration[buildConfiguration.BuildConfiguration])
{
env[key] = value;
}
}
}

internal static void UpdateVariables(IDictionary<string, string> settings, ref Dictionary<string, string> output)
{
if (settings is null || settings.Count < 1)
Expand Down

0 comments on commit 4578952

Please sign in to comment.