升级Azure.Identity包后本地Azure Function运行异常问题咨询
解决方案
你不需要通过环境判断切换凭据类型,自定义DefaultAzureCredential的配置就能恢复类似旧包的工作方式,同时兼容本地Visual Studio和生产环境:
方法1:排除不需要的凭据类型
如果不想让DefaultAzureCredential尝试EnvironmentCredential(避免触发环境变量未配置的错误),可以用DefaultAzureCredentialBuilder排除它,后续会自动尝试其他适配凭据(Visual Studio凭据用于本地、托管标识用于生产):
if (!string.IsNullOrEmpty("vaultName")) { var credential = new DefaultAzureCredentialBuilder() .ExcludeEnvironmentCredential() .Build(); configurationBuilder.ConfigurationBuilder.AddAzureKeyVault( keyVaultUri, credential); }; Configuration = configurationBuilder.ConfigurationBuilder.Build();
方法2:自定义凭据尝试顺序
也可以指定DefaultAzureCredential的凭据尝试优先级,让Visual Studio凭据优先执行,本地开发时会直接使用它,跳过环境变量检查:
if (!string.IsNullOrEmpty("vaultName")) { var credential = new DefaultAzureCredentialBuilder() .AddVisualStudioCredential() .AddManagedIdentityCredential() .AddAzureCliCredential() .Build(); configurationBuilder.ConfigurationBuilder.AddAzureKeyVault( keyVaultUri, credential); }; Configuration = configurationBuilder.ConfigurationBuilder.Build();
旧包正常工作的原因
旧版AspNetCore.Configuration.Secret中的DefaultAzureCredential实现与新版Azure.Identity不同——旧版默认不包含EnvironmentCredential的尝试逻辑,而新版Azure.Identity的DefaultAzureCredential会优先尝试环境变量凭据,这才导致你看到环境变量未配置的错误提示。
通过上述自定义配置,既能保留DefaultAzureCredential自动适配多环境的能力,又能避免本地开发时的错误提示。
内容的提问来源于stack exchange,提问作者jerry xu
相关产品推荐
相关产品推荐

