.NET Core 3.1添加UserSecrets报错:找不到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

