当我尝试从 PS cmdlet 调用任何 Azure KeyVault API 时,我的 VS 调试会话中止。我该如何调试呢?

When I try to invoke any Azure KeyVault API from a PS cmdlet, my VS debugging session aborts. How can I debug this?

我在 C# 中有一个 PS Cmdlet - 它的 ProcessRecord 函数如下所示:

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyClient = new KeyVaultClient(
    new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

var cert = await keyClient.GetCertificateAsync(keyVaultCertUri);

我的问题是当我从我的 Cmdlet 中调用任何 KeyVaultClient API 时,VS 只是结束调试会话。 Debug window 中没有有用的输出;不抛出异常;虚无。调试会话突然结束。

我如何调试正在发生的事情才能成功进行此调用?

问题是,从Cmdlet继承时,ProcessRecord不能异步。如果您直接在 ProcessRecord 中执行 await,它将立即结束处理。因此,任何异步调用都必须在 ProcessRecord 中进行同步才能执行。

在调试方面,我在 VS 中没有发现等待问题的证据。一位同事在描述此问题行为的 PowerShell Git 页面上发现了一个未决问题。