• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

667
Views
el archivo de configuración 'secrets.json' no se encontró y no es opcional (.NET 6)

El error de secretos de usuario se genera en una canalización de CI/CD, cuando no se debe esperar el archivo secrets.json.

Pasos:

  1. Crear proyecto .NET 5
  2. Se agregaron secretos de usuario.
  3. El código se ejecuta localmente y en canalizaciones de CI/CD.
  4. Actualice al proyecto .NET 6 (y obtenga una vista previa de los paquetes NuGet 6.*)

El código se ejecuta localmente, pero falla en las canalizaciones de CI/CD, con el siguiente error:

"No se encontró el archivo de configuración 'secrets.json' y no es opcional".

Previsto:

El código se ejecuta sin que esté presente el archivo secrets.json Configuración .NET 6, Microsoft.Extensions.Configuration.UserSecrets: 6.0.0-preview.1.21102.12

¿Regresión? Esto funciona en .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
about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

https://github.com/dotnet/runtime/issues/48485

Básicamente, es una característica nueva en .NET6 que 'secrets.json' no es opcional de forma predeterminada.

 AddUserSecrets(this IConfigurationBuilder configuration, Assembly assembly, bool optional);

Ese parámetro 'opcional' debe establecerse en 'verdadero' en su código.

 var configuration = new ConfigurationBuilder() .AddEnvironmentVariables() .AddCommandLine(args) .AddJsonFile("appsettings.json") .AddUserSecrets<Program>(true) .Build();
about 3 years ago · Santiago Trujillo Report

0

A diferencia de las variables de entorno, los secretos de usuario se colocan en un archivo de configuración similar a appsettings.json . Tener configuraciones fuera del proyecto estructuradas similares es excelente cuando necesita copiar claves y valores entre archivos y hay soporte para agregar, eliminar y enumerar valores, como le mostraré más adelante en esta publicación.

Para comprender los secretos de los usuarios, retomemos el ejemplo de la publicación anterior. Allí tenía un archivo appsettings.json con este aspecto:

 { "AppSettings": { "ConnectionString": "http://localhost:9000" }, ... }

Para anular la AppSettings:ConnectionString en máquinas individuales, cada usuario debe agregar un secreto de usuario con el mismo nombre. El enfoque más sencillo es hacer clic con el botón derecho en el proyecto y seleccionar Administrar secretos de usuario :

ingrese la descripción de la imagen aquí

Esto crea y abre un nuevo archivo JSON vacío llamado secrets.json . El archivo se coloca debajo de C:\Users\<username>\AppData\Roaming\Microsoft\UserSecrets\<id> donde <username> coincide con su usuario de Windows y es un GUID generado aleatoriamente. Lo importante a tener en cuenta aquí es que el archivo se encuentra fuera del directorio de su proyecto. Para "vincular" la ubicación del archivo secrets.json a su proyecto, Visual Studio agregó un poco de marcado al archivo csproj :

 <PropertyGroup> <UserSecretsId>dda25df4-9a88-4a7e-8502-2134b74e4729</UserSecretsId> </PropertyGroup>

En caso de que no esté usando Visual Studio, puede generar un GUID aleatorio y agregar el <UserSecretsId> manualmente.

En caso de que desee anular la AppSettings:ConnectionString , agregue una estructura similar al archivo secrets.json :

 { "AppSettings": { "ConnectionString": "http://localhost:9000?user=mehdidaustany&password=1234" } }

También puede colapsar configuraciones como esta:

 { "AppSettings:ConnectionString": "http://localhost:9000?user=mehdidaustany&password=1234" }

Finalmente, agregue secrets.json creado en la raíz de su proyecto.

about 3 years ago · Santiago Trujillo Report

0

En .net 6.0, la aplicación necesita secret.json para ejecutarse. en cualquier caso, si estás migrando desde .net core 3.1 o .net 5.0 para ejecutar tu aplicación en .net 6.0:

  1. ejecute dotnet user-secrets init en la carpeta de su proyecto usando herramientas de línea de comandos.
  2. asegúrese de tener un archivo secret.json en el dominio de su aplicación ...\bin\Debug\net6.0 . No importa si su archivo secret.json está vacío por ahora.

¡Presiona F5 y ejecuta tu aplicación!

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error