InvalidOperationException:无法在程序集中找到"UserSecretsIdAttribute"

Tec*_*chy 26 asp.net azure asp.net-core

将ASP.NET Core应用程序部署到azure并打开网站后,我收到以下错误:

InvalidOperationException:在程序集'******,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'上找不到'UserSecretsIdAttribute'.

异常细节还包括在此行代码的Startup.cs上发生错误:

builder.AddUserSecrets();

谢谢

juu*_*nas 39

最近有一个用户机密模块的更新.版本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>
Run Code Online (Sandbox Code Playgroud)

这将生成以下程序集级属性.或者,不是将其添加到.csproj文件中,您当然可以自己添加它,例如添加到Startup.cs:

[assembly: UserSecretsId("aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed")]
Run Code Online (Sandbox Code Playgroud)

另外,你应该使用:

builder.AddUserSecrets<Startup>();
Run Code Online (Sandbox Code Playgroud)

它将在给定类型的程序集中搜索该属性,在本例中我使用了Startup类.

注意:这将在2.0中弃用:( 1.0.2和1.1.1已将其标记为已过时)

builder.AddUserSecrets();
Run Code Online (Sandbox Code Playgroud)

我检查了用户机密配置的源代码,并且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);
Run Code Online (Sandbox Code Playgroud)

它试图UserSecretsId在你的程序集中找到属性,并且失败了,检查它是否可以在project.json中找到它.然后(如评论)返回关于缺失属性的错误,因为他们不想再抱怨project.json,因为它已被弃用.


csk*_*wrd 5

对于处于我这种情况的人,我想添加到这个答案中。

我正在编写一个 .NET Core 控制台应用程序,尝试使用机密管理器(不确定它是否适用于控制台应用程序)。我能够摆脱错误的唯一方法是在我使用机密管理器的程序集上使用程序集级别属性。

正如我所说,我不确定机密管理器是否适用于控制台应用程序。所以也许 .xproj 文件与 .csproj 文件存在问题。