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

C++项目引用System.Management.Automation运行报强名称验证错误如何解决?

解决方案

针对NuGet安装仅生成packages.config无生效的问题

  • 首先确认项目已开启CLR支持:打开项目属性 -> 配置属性 -> 高级 -> 公共语言运行时支持,设置为公共语言运行时支持(/clr),原生C++项目无法直接引用.NET程序集,必须开启该选项生成混合模式程序集。
  • C++/CLI项目默认的packages.config格式不会自动注入程序集引用,需要切换NuGet包管理格式:右键项目 -> 管理NuGet包 -> 点击右上角设置齿轮 -> 常规 -> 默认包管理格式改为PackageReference,删除原有packages.config文件后重新安装目标NuGet包,安装完成后引用会自动生效。

针对运行时抛出FileLoadException、强名称验证失败的问题

  • 首先确认程序集版本与项目运行时匹配:System.Management.Automation 7.2.0.0对应.NET 6+运行时,如果你项目使用的是.NET Framework 4.x,必须安装Microsoft.PowerShell.5.1.ReferenceAssembliesNuGet包使用PowerShell 5.1版本的程序集,跨运行时版本引用会直接触发强名称验证失败。
  • 开发环境可临时禁用对应程序集的强名称验证:打开管理员权限的Visual Studio开发者命令提示符,依次执行以下命令:
reg ADD "HKLM\SOFTWARE\Microsoft\StrongName\Verification\System.Management.Automation,7.2.0.0,31bf3856ad364e35" /f
reg ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\StrongName\Verification\System.Management.Automation,7.2.0.0,31bf3856ad364e35" /f

该配置仅适用于开发调试场景,生产环境禁止使用。

  • 添加程序集绑定重定向配置:在项目根目录新建app.config文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Management.Automation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-7.2.0.0" newVersion="7.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

之后打开项目属性 -> 配置属性 -> 生成事件 -> 后期生成事件,添加命令:
copy /Y "$(ProjectDir)app.config" "$(TargetPath).config"
确保运行时能读取到绑定重定向规则。

针对复制DLL到目录仍加载失败的问题

  • System.Management.Automation 7.x版本存在大量链式依赖项,手动复制单DLL无法满足运行要求,使用PackageReference格式安装NuGet包后,构建时会自动将所有依赖项复制到输出目录,无需手动操作。
  • 确认项目平台目标与程序集架构匹配:如果引用的是x64版本的PowerShell程序集,项目平台目标需设置为x64,禁止设置为AnyCPU或x86,否则会触发加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:04