C#:i segreti utente non vengono caricati quando si utilizza GenerateAssemblyInfo=false

C#:i segreti utente non vengono caricati quando si utilizza GenerateAssemblyInfo=false

Problema

Hai configurato correttamente i segreti utente, ma il framework non scambierà il valore del segreto in fase di esecuzione. Sembra che non stia affatto caricando secrets.json.

Verifica se stai utilizzando GenerateAssemblyInfo=false nel tuo file .csproj.

Quando aggiungi un file dei segreti utente, viene generato un guid dei segreti utente e lo inserisce nel tuo .csproj come UserSecretsId proprietà. Inserisce anche questo guid in un attributo di informazioni sull'assembly chiamato UserSecretsIdAttribute. Se hai GenerateAssemblyInfo=false , non aggiungerà UserSecretsIdAttribute per te, motivo per cui non caricherà il file dei segreti dell'utente in fase di esecuzione.

Se hai inserito GenerateAssemblyInfo=false nel tuo file .csproj, il tuo file .csproj potrebbe assomigliare a questo:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <UserSecretsId>b5dc3595-d335-49aa-b0a6-96e2f08e2206</UserSecretsId>
  </PropertyGroup>

</Project>
Code language: HTML, XML (xml)

Soluzione

Per utilizzare GenerateAssemblyInfo=false e segreti utente contemporaneamente, dovrai aggiungere UserSecretsIdAttribute nel tuo progetto, in questo modo:

using System;
using System.Reflection;

[assembly: Microsoft.Extensions.Configuration.UserSecrets.UserSecretsIdAttribute("b5dc3595-d335-49aa-b0a6-96e2f08e2206")]

Code language: C# (cs)

Nota:devi usare lo stesso guid che si trova nella proprietà .csproj UserSecretsId. In questo esempio, è b5dc3595-d335-49aa-b0a6-96e2f08e2206 .

Se non è necessario utilizzare GenerateAssemblyInfo=false , quindi rimuoverlo dal file .csproj.