指定的名称已在使用中

部署到 Azure 时,初始部署可能会出现如下错误并失败:

“指定的名称已在使用中”

本文介绍几种避免此问题的技术。

症状

将 .NET Aspire 项目部署到 Azure时,应用模型中的资源 转换为 Azure 资源。 某些 Azure 资源具有全局范围的名称,例如 Azure 应用配置,其中所有实例都位于 [name].azconfig.io 全局命名空间中。

[name] 的值派生自 .NET.NET Aspire 资源名称,以及基于资源组名称的随机字符。 但是,生成的字符串可能会超过应用配置中资源名称的允许长度。 因此,某些字符将被截断,以确保符合性。

当全局命名空间中发生冲突时,资源无法部署,因为 [name]+[truncated hash] 的组合不够唯一。

可能的解决方案

一种解决方法是避免对资源使用公用名称,例如 appconfigstorage。 而是选择更有意义的特定名称。 这减少了冲突的可能性,但不完全消除冲突。 在这种情况下,可以使用回调方法设置特定名称,并避免完全使用计算字符串。

请考虑以下示例:

var appConfig = builder.AddAzureAppConfiguration(
    "appConfig",
    (resource, construct, store) =>
{
    store.AssignProperty(p => p.Name, "'noncalculatedname'");
});