User Secrets error is being generated in a CI/CD pipeline, when secrets.json file shouldn't be expected.
Steps:
Code runs locally, but fails in CI/CD pipelines, with error:
"The configuration file 'secrets.json' was not found and is not optional."
Expected:
Code runs without the secrets.json file being present Configuration .NET 6, Microsoft.Extensions.Configuration.UserSecrets: 6.0.0-preview.1.21102.12
Regression? This works in .NET 5, Microsoft.Extensions.Configuration.UserSecrets: 5.0.0.*
System.IO.FileNotFoundException: The configuration file 'secrets.json' was not found and is not optional. The physical path is '/home/runner/work/UserSecretsRegression/UserSecretsRegression/UserSecrets/UserSecrets.Tests/bin/Release/net6.0/secrets.json'.
  Stack Trace:
      at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
   at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
   at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
   at UserSecrets.Tests.UnitTest1.TestMethod1() in /home/runner/work/UserSecretsRegression/UserSecretsRegression/UserSecrets/UserSecrets.Tests/UnitTest1.cs:line 13
https://github.com/dotnet/runtime/issues/48485
Basically, it's a new feature in .NET6 that 'secrets.json' is not optional by default!
AddUserSecrets(this IConfigurationBuilder configuration, Assembly assembly, bool optional);
That 'optional' parameter should be set to 'true' in your code.
 var configuration = new ConfigurationBuilder()
    .AddEnvironmentVariables()
    .AddCommandLine(args)
    .AddJsonFile("appsettings.json")
    .AddUserSecrets<Program>(true)
    .Build();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With