Asp.net InvalidOperationException:找不到';UserSecretsIdAttribute';组装
将ASP.NET核心应用程序部署到azure并打开站点后,我收到以下错误: InvalidOperationException:在上找不到“UserSecretsIdAttribute” 程序集'****,版本=1.0.0.0,区域性=中性, PublicKeyToken=null' 异常详细信息还包括错误发生在Startup.cs的这一行代码中: builder.AddUserSecrets()Asp.net InvalidOperationException:找不到';UserSecretsIdAttribute';组装,asp.net,azure,asp.net-core,Asp.net,Azure,Asp.net Core,将ASP.NET核心应用程序部署到azure并打开站点后,我收到以下错误: InvalidOperationException:在上找不到“UserSecretsIdAttribute” 程序集'****,版本=1.0.0.0,区域性=中性, PublicKeyToken=null' 异常详细信息还包括错误发生在Startup.cs的这一行代码中: builder.AddUserSecrets() 谢谢最近刚刚更新了用户机密模块。版本1.0.1和更高版本现在要求您为用户机密的id指定程序集级属性
谢谢最近刚刚更新了用户机密模块。版本1.0.1和更高版本现在要求您为用户机密的id指定程序集级属性,或者作为备用属性,与以前在project.json中的方式相同 以下是GitHub上的公告: 您可以在.csproj中定义机密id,如下所示:
<PropertyGroup>
<UserSecretsId>aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed</UserSecretsId>
</PropertyGroup>
此外,您还应使用:
builder.AddUserSecrets<Startup>();
我检查了user secrets配置,在没有类型的情况下调用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);
var attribute=entryAssembly.GetCustomAttribute();
if(属性!=null)
{
返回AddUserSecrets(配置,属性.UserSecretsId);
}
//尝试回退到project.json以获得旧版支持
尝试
{
var fileProvider=configuration.GetFileProvider();
返回AddSecretsFile(配置,PathHelper.GetSecretsPath(fileProvider));
}
抓住
{ }
//显示关于缺少UserSecretdAttribute的错误,而不是关于缺少的错误
//project.json,因为PJ即将消失。
抛出缺失属性异常(entryAssembly);
它试图在程序集上找到UserSecretsId
属性,如果失败,则检查是否可以在project.json中找到它。然后(如注释所示)返回一个关于缺少属性的错误,因为他们不想再抱怨project.json了,因为它已被弃用。对于我这种情况的人,我想补充一下
我正在编写一个.NET核心控制台应用程序,试图使用secrets manager(不确定它是否适用于控制台应用程序)。我能够消除错误的唯一方法是在使用机密管理器的程序集上使用程序集级别属性
正如我所说,我不确定secrets manager是否适用于控制台应用程序。因此,.xproj文件与.csproj文件之间可能存在问题。My
.NET Core 3.*
Worker服务需要额外设置(不仅仅是一个Web项目)
在Program.cs
中的CreateHostBuilder
方法中,我需要这个:
.ConfigureAppConfiguration((ctx, builder) =>
{
// enable secrets in development
if (ctx.HostingEnvironment.IsDevelopment())
{
builder.AddUserSecrets<Worker>();
}
})
之后我可以访问机密。您是否尝试将
userSecretsId
添加到project.json
?@Alex78191我在project.json中已经有了它。此错误发生在我尝试迁移到多个项目后。我正在使用VS代码。这个链接详细介绍了如何做到这一点,它帮助我解决了这个问题。另外,如果您在具有UserSecretsId
属性的项目中没有Microsoft.Extensions.Configuration.UserSecrets
依赖项,则不会创建该属性。如果您没有该依赖项,我认为您根本无法使用用户机密。我是暂时依赖的(通过“base”项目我在解决方案中的多个项目之间共享样板文件)。当我暂时使用它时,assembly属性丢失了,但是当我直接添加依赖项时,错误消失了。这很有趣。我假设如果你手动添加属性,它会工作吗?是的,如果我手动添加属性,它工作正常。我想依赖项会给构建过程添加一些东西,从而从项目文件生成属性?谢谢@aage-这正是我遇到的问题。我正在使用Host.CreateDefaultBuilder(args)
,只需要添加Microsoft.Extensions.Configuration.UserSecrets
包,尽管它已经隐式可用。。。令人困惑。显然,这是由旧版本的Microsoft.Extensions.Hosting造成的。我有3.1.8版,在使用dotnet new
生成项目时自动包含该版本。升级到5.0.0版后,它工作正常,无需显式添加Microsoft.Extensions.Configuration.UserSecrets
包。
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);
.ConfigureAppConfiguration((ctx, builder) =>
{
// enable secrets in development
if (ctx.HostingEnvironment.IsDevelopment())
{
builder.AddUserSecrets<Worker>();
}
})
install-package Microsoft.Extensions.Configuration.UserSecrets