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

使用Microsoft.Graph与Azure.Identity类库时遇程序集加载异常求助

解决COM注册类库中Microsoft.Identity.Client版本冲突问题

你遇到的是典型的.NET程序集版本冲突问题,尤其是在COM宿主环境下,配置文件的作用方式和普通控制台应用不同。以下是可行的解决方法:

方法1:给宿主程序添加程序集绑定重定向

COM组件的宿主是cscript.exe,它不会自动读取类库的app.config,需要在cscript.exe的同级目录创建cscript.exe.config文件,通过绑定重定向强制让所有对旧版本Microsoft.Identity.Client的请求指向已安装的高版本:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Identity.Client" 
                          publicKeyToken="0a613f4dd989e8ae" 
                          culture="neutral" />
        <!-- 覆盖所有旧版本,指向当前使用的4.46.1.0 -->
        <bindingRedirect oldVersion="0.0.0.0-4.46.1.0" 
                        newVersion="4.46.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

注意:如果使用32位cscript,需要在C:\Windows\SysWOW64目录下创建该配置文件;64位则在C:\Windows\System32目录。

方法2:手动复制依赖程序集到宿主目录

直接将Microsoft.Identity.Client.dll(4.46.1.0版本)复制到cscript.exe所在的目录(对应位数的系统目录),这样宿主程序在加载时会优先找到这个高版本文件,跳过对旧版本的查找。

方法3:自动生成绑定重定向配置

在类库项目的.csproj文件中添加以下配置,让NuGet自动生成正确的绑定重定向规则:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

编译项目后,在输出目录会生成[你的类库名].dll.config文件,将其中的<assemblyBinding>节点内容复制到cscript.exe.config中即可。

验证步骤

  1. 确保使用对应位数的RegAsm注册类库(64位用C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe,32位用C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe)
  2. 完成配置或文件复制后,重新用cscript调用类库测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:15:32