web-dev-qa-db-ja.com

InvalidOperationException:アセンブリで「UserSecretsIdAttribute」が見つかりませんでした

ASP.NET CoreアプリをAzureにデプロイしてサイトを開くと、次のエラーが表示されます。

InvalidOperationException:アセンブリ '******、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null'で 'UserSecretsIdAttribute'が見つかりませんでした。

例外の詳細には、次のコード行のStartup.csでエラーが発生することも含まれています。

builder.AddUserSecrets();

ありがとうございました

25
Techy

最近、ユーザーシークレットモジュールが更新されました。バージョン1.0.1以降では、ユーザーシークレットのIDにアセンブリレベルの属性を指定するか、または以前のproject.jsonでの方法のフォールバックとして指定する必要があります。

GitHubの発表は次のとおりです。 https://github.com/aspnet/Announcements/issues/209

次のように、.csprojで秘密IDを定義できます。

_<PropertyGroup>
  <UserSecretsId>aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed</UserSecretsId>
</PropertyGroup>
_

これにより、次のアセンブリレベルの属性が生成されます。あるいは、.csprojファイルに追加する代わりに、もちろん自分で追加することもできます。 Startup.csへ:

_[Assembly: UserSecretsId("aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed")]
_

また、以下を使用する必要があります。

_builder.AddUserSecrets<Startup>();
_

指定されたタイプのアセンブリでその属性を検索します。この場合、Startupクラスを使用しました。

注:これは2.0で非推奨になります:(1.0.2および1.1.1は廃止とマークしました)

_builder.AddUserSecrets();
_

ユーザーシークレットの構成について ソースコード をチェックし、タイプなしでAddUserSecrets()を呼び出すと、次のようになります。

_var attribute = entryAssembly.GetCustomAttribute<UserSecretsIdAttribute>();
if (attribute != null)
{
     return AddUserSecrets(configuration, attribute.UserSecretsId);
}

// try fallback to project.json for legacy support
try
{
     var fileProvider = configuration.GetFileProvider();
     return AddSecretsFile(configuration, PathHelper.GetSecretsPath(fileProvider));
}
catch
{ }

// Show the error about missing UserSecretIdAttribute instead an error about missing
// project.json as PJ is going away.
throw MissingAttributeException(entryAssembly);
_

アセンブリでUserSecretsId属性を見つけようとして失敗し、project.jsonで見つけられるかどうかを確認しています。その後、(コメントされているように)project.jsonが非推奨になっているのでこれ以上文句を言いたくないので、欠落している属性に関するエラーを返します。

37
juunas

私の状況にある人のために、これに answer を追加したいと思います。

私は.NET Coreコンソールアプリを作成していて、シークレットマネージャーを使用しようとしています(コンソールアプリ用かどうかはわかりません)。エラーを自分で取り除くことができた唯一の方法は、シークレットマネージャーを使用していたアセンブリのアセンブリレベル属性を使用することでした。

先ほど言ったように、シークレットマネージャーがコンソールアプリ向けかどうかはわかりません。したがって、.xprojファイルと.csprojファイルに問題がある可能性があります。

2
cskwrd