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

C#编写PowerShell Cmdlet访问Azure Key Vault时Azure.Core加载失败

解决Azure.Core程序集加载失败问题

以下是针对你遇到的PowerShell Cmdlet加载Azure.Core失败问题的具体解决步骤:

1. 统一NuGet依赖版本

Azure.Identity和Azure.Security.KeyVault.Secrets都依赖Azure.Core,版本不匹配会导致加载失败。在项目文件(.csproj)中显式指定Azure.Core的版本,确保与其他Azure包依赖的版本一致:

<PackageReference Include="Azure.Core" Version="1.25.0" />
<PackageReference Include="Azure.Identity" Version="1.10.0" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.5.0" />

执行以下命令清理并重新还原依赖:

dotnet clean
dotnet restore

2. 确保依赖项复制到输出目录

在项目文件中设置Azure相关包的PrivateAssets为all,强制将依赖DLL复制到输出文件夹:

<PackageReference Include="Azure.Identity" Version="1.10.0">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.5.0">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Azure.Core" Version="1.25.0">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>

3. 修正异步方法实现

你的代码中使用async void ProcessRecord()会导致PowerShell在异步操作完成前退出,同时可能引发隐藏的资源加载问题。改为异步任务实现:

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using System.Management.Automation;
using System.Threading.Tasks;

namespace My.PowerShell.Commands;
[Cmdlet(VerbsCommon.Get, "DGAMasterKeyPwd")]
[OutputType(typeof(string))]
public class GetDGAMasterKeyPwdCmdlet : Cmdlet
{
    protected override void ProcessRecord()
    {
        ProcessRecordAsync().GetAwaiter().GetResult();
    }

    private async Task ProcessRecordAsync()
    {
        var vaultUri = $"https://XXXXXXX.vault.azure.net";
        var client = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential());
        var secret = await client.GetSecretAsync("XXXXXXXXX");
        WriteObject(secret.Value.Value); // 输出密码字符串而非Secret对象
    }
}

4. 验证PowerShell与.NET版本兼容性

确保项目目标框架与PowerShell 7的基础.NET版本匹配:

  • PowerShell 7.2+基于.NET 6,项目文件中设置:
    <TargetFramework>net6.0</TargetFramework>
    
  • 如果使用更高版本的.NET(如7/8),需对应升级PowerShell到7.3/7.4版本。

5. 检查模块部署结构

将编译后的Cmdlet DLL与所有依赖的Azure DLL(包括Azure.Core.dll)放在同一目录下,再通过Import-Module加载模块,避免PowerShell找不到依赖文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:05:34