.NET 6升级后CI/CD管道报secrets.json不存在且为必填项如何解决?
问题原因
.NET 6.0.0-preview.1.21102.12版本的Microsoft.Extensions.Configuration.UserSecrets包调整了AddUserSecrets方法的默认参数配置,原本.NET 5版本中用户机密文件默认标记为可选,不存在时不会抛出异常;该预览版本将默认值修改为必选,因此CI/CD环境(没有配置用户机密)运行时就会触发找不到文件的错误。
解决方案
你可以通过以下任意一种方式修复:
- 显式指定
AddUserSecrets的optional参数为true
修改你的配置构建代码,把AddUserSecrets()调用调整为如下形式:
把泛型参数替换为你项目中对应的类即可,显式声明用户机密文件可选,不存在时直接跳过加载。config.AddUserSecrets<YourStartupClass>(optional: true) - 升级UserSecrets包到正式发布版本
这个默认参数的改动属于预览版的临时调整,在.NET 6正式版及后续更新的版本中已经回滚了该默认行为,你可以把Microsoft.Extensions.Configuration.UserSecrets包升级到6.0.0正式版及以上的稳定版本,无需修改代码即可恢复.NET 5时期的默认逻辑。 - 条件加载用户机密
如果你只需要在开发环境加载用户机密,可以添加环境判断逻辑,仅在开发环境调用AddUserSecrets:
这种方式也可以避免非开发环境去加载不存在的用户机密文件。if (env.IsDevelopment()) { config.AddUserSecrets<YourStartupClass>(); }
内容的提问来源于stack exchange,提问作者Mehdi Daustany
相关产品推荐
相关产品推荐

