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

使用C#调用Azure SDK创建DataDisk无报错但未成功,求排查

解决C# Azure SDK创建并挂载数据磁盘无报错但未生效的问题

嘿,我一眼就看出问题所在了——你的代码只是在本地VM对象里添加了磁盘,但根本没把这个更新请求发送给Azure服务端!

Azure .NET SDK的设计逻辑是这样的:vm.Update()只是生成一个更新操作的构建器,它只会帮你定义要做什么更改,并不会自动执行这个操作。你得手动触发提交,才能让Azure真正创建并挂载磁盘。

来看修正后的代码,两种可行方式供你选择:

方式一:用SDK内置链式更新方法(推荐)

这种方式更简洁,SDK会自动处理不少细节:

var vm = azure.VirtualMachines.List()
    .FirstOrDefault(x => x.Name.Equals(vmName, StringComparison.OrdinalIgnoreCase));

if (vm == null)
{
    Console.WriteLine($"虚拟机 {vmName} 不存在");
    return;
}

// 构建更新操作并立即提交到Azure
var updatedVm = vm.Update()
    .WithNewDataDisk(
        lun: vm.StorageProfile.DataDisks.Count + 1,
        createOption: DiskCreateOptionTypes.Empty,
        diskSizeGB: 128,
        name: $"{vmName}_disk")
    .Apply();

方式二:手动创建DataDisk对象再添加

如果你还是偏好手动创建磁盘对象的方式,记得要把添加操作放到更新构建器里,最后调用Apply()提交更改:

var vm = azure.VirtualMachines.List()
    .FirstOrDefault(x => x.Name.Equals(vmName, StringComparison.OrdinalIgnoreCase));

if (vm == null)
{
    Console.WriteLine($"虚拟机 {vmName} 不存在");
    return;
}

var disk = new DataDisk(
    lun: vm.StorageProfile.DataDisks.Count + 1,
    createOption: DiskCreateOptionTypes.Empty,
    name: $"{vmName}_disk")
{
    DiskSizeGB = 128
};
disk.Validate();

// 通过更新构建器添加磁盘并执行服务端更新
var updatedVm = vm.Update()
    .WithDataDisk(disk)
    .Apply();

额外注意事项

  • 务必处理VM为null的情况,避免空引用异常;
  • LUN号要保证唯一,你用Count +1的方式没问题,但如果之前有删除过磁盘,建议检查现有LUN的最大值再加1更稳妥;
  • 不同版本的Azure SDK API可能略有差异,比如新版Azure.ResourceManager.Compute可能用AddDataDisk而非WithDataDisk,但核心逻辑都是必须调用提交方法(如Apply())触发服务端更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:08:03