C# – Benutzergeheimnisse werden nicht geladen, wenn Sie GenerateAssemblyInfo=false verwenden

C# – Benutzergeheimnisse werden nicht geladen, wenn Sie GenerateAssemblyInfo=false verwenden

Problem

Sie haben Benutzergeheimnisse ordnungsgemäß konfiguriert, aber das Framework tauscht den geheimen Wert zur Laufzeit nicht aus. Es scheint, dass secrets.json überhaupt nicht geladen wird.

Prüfen Sie, ob Sie GenerateAssemblyInfo=false verwenden in Ihrer .csproj-Datei.

Wenn Sie eine Benutzergeheimnisdatei hinzufügen, wird eine Benutzergeheimnis-GUID generiert und als UserSecretsId in Ihre .csproj-Datei eingefügt Eigentum. Außerdem fügt es diese Guid in ein Assembly-Info-Attribut namens UserSecretsIdAttribute. ein Wenn Sie GenerateAssemblyInfo=false haben , wird UserSecretsIdAttribute nicht hinzugefügt für Sie, weshalb die Datei mit den Benutzergeheimnissen zur Laufzeit nicht geladen wird.

Wenn Sie GenerateAssemblyInfo=false gesetzt haben in Ihrer .csproj-Datei kann Ihre .csproj-Datei etwa so aussehen:

<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)

Lösung

So verwenden Sie GenerateAssemblyInfo=false und Benutzergeheimnisse gleichzeitig, müssen Sie UserSecretsIdAttribute hinzufügen in Ihrem Projekt wie folgt:

using System;
using System.Reflection;

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

Code language: C# (cs)

Hinweis:Sie müssen dieselbe Guid verwenden, die in der .csproj UserSecretsId-Eigenschaft enthalten ist. In diesem Beispiel ist es b5dc3595-d335-49aa-b0a6-96e2f08e2206 .

Wenn Sie GenerateAssemblyInfo=false nicht verwenden müssen , und entfernen Sie es dann aus Ihrer .csproj-Datei.