You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1添加UserSecrets报错:找不到UserSecretsIdAttribute

解决.NET Core 3.1用户密钥加载时的UserSecretsIdAttribute异常

我之前也碰到过这个一模一样的坑,折腾了好一会儿才捋清楚问题,给你几个实用的排查和解决方向:

  • 先确认csproj里的UserSecretsId配置
    打开你的项目.csproj文件,确保<UserSecretsId>是放在<PropertyGroup>节点下的,格式类似:

    <PropertyGroup>
      <TargetFramework>netcoreapp3.1</TargetFramework>
      <UserSecretsId>abc123-4567-890d-efgh-ijklmnopqrst</UserSecretsId>
    </PropertyGroup>
    

    别不小心把它放到了其他节点(比如<ItemGroup>)里,而且要确保这是当前启动项目的csproj,别改错了其他依赖项目的配置。

  • 清理重建,干掉VS缓存
    有时候Visual Studio的缓存会导致配置不生效,先右键解决方案选择「清理」,然后手动删除项目根目录下的bin和obj文件夹,再重新生成解决方案。这一步经常能解决这种“明明配置都对但报错”的玄学问题。

  • 手动添加UserSecretsIdAttribute到AssemblyInfo
    如果自动生成的属性没生效,你可以手动在项目的Properties/AssemblyInfo.cs文件里添加一行代码:

    [assembly: Microsoft.Extensions.Configuration.UserSecrets.UserSecretsId("你的UserSecretsId")]
    

    把引号里的内容替换成你csproj里的那个ID,这样程序集就能直接识别到这个属性,绕过自动生成可能出现的问题。

  • 优化AddUserSecrets的调用方式
    你当前用的Assembly.GetExecutingAssembly()可能会因为程序集加载的问题导致识别不到属性,换成泛型版本会更可靠:

    if (hostContext.HostingEnvironment.IsDevelopment())
    {
        builder.AddUserSecrets<Program>(); // Program是你启动类的类型
    }
    

    这个泛型方法会自动获取指定类型所在程序集的UserSecretsId,避免手动获取程序集可能出现的错误。

  • 验证密钥文件的路径是否匹配
    去%APPDATA%\Microsoft\UserSecrets目录下,检查对应ID的文件夹是否存在,文件夹名称要和你csproj里的UserSecretsId完全一致(包括大小写,Windows虽然不区分大小写,但有时候会因为复制粘贴的空格导致不匹配),里面的secrets.json也要确保格式正确。

内容的提问来源于stack exchange,提问作者Yoda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:27:39