C# – GenerateAssemblyInfo=false を使用している場合、ユーザー シークレットが読み込まれない

問題

ユーザー シークレットを適切に構成しましたが、フレームワークは実行時にシークレット値をスワップしません。 secrets.json をまったくロードしていないようです。

GenerateAssemblyInfo=false を使用しているかどうかを確認します .csproj ファイルで。

ユーザー シークレット ファイルを追加すると、ユーザー シークレット GUID が生成され、それが UserSecretsId として .csproj に配置されます。 財産。また、この GUID を UserSecretsIdAttribute. というアセンブリ情報属性に配置します。 GenerateAssemblyInfo=false の場合 、UserSecretsIdAttribute を追加しません そのため、実行時にユーザー シークレット ファイルが読み込まれません。

GenerateAssemblyInfo=false を入れた場合 .csproj ファイルでは、.csproj ファイルは次のようになります。

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

解決策

GenerateAssemblyInfo=false を使用するには とユーザー シークレットを同時に取得するには、 UserSecretsIdAttribute を追加する必要があります あなたのプロジェクトでは、次のように:

using System;
using System.Reflection;

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

Code language: C# (cs)

注:.csproj UserSecretsId プロパティにあるものと同じ GUID を使用する必要があります。この例では、b5dc3595-d335-49aa-b0a6-96e2f08e2206 です .

GenerateAssemblyInfo=false を使用する必要がない場合 、次に .csproj ファイルから削除します。