如何解决Microsoft Graph 5.44.0与Microsoft Identity Client 4.59.0版本冲突?
插件DLL依赖冲突解决办法
1. 版本硬对齐
- 试试把
Microsoft.Identity.Client升级到能兼容Microsoft.IdentityModel.Abstractions 7.x的版本,比如找MSAL 4.x里依赖7.x的子版本,或者干脆升MSAL 5.x(先确认集成Windows身份验证流程能用),让它和Microsoft Graph 5.44.0的依赖版本对上。 - 如果非要用MS Graph 4.54.0,就把
Microsoft.IdentityModel.Abstractions锁死在6.22.0版本,直接在项目的.csproj文件里加这段配置:
<PackageReference Include="Microsoft.IdentityModel.Abstractions" Version="6.22.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
另外用dotnet list package --include-transitive命令查一下所有传递依赖,手动把冲突的版本排除掉。
2. 代码里动态做绑定重定向
不用改主应用配置,在插件初始化的时候加一段代码,强制指定加载的程序集版本:
using System.Reflection; // 定义要重定向的版本映射 var redirectMap = new Dictionary<string, Version> { { "Microsoft.IdentityModel.Abstractions", new Version("6.22.0") } // 换成你需要的目标版本 }; // 注册程序集加载事件 AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { var assemblyName = new AssemblyName(args.Name); if (redirectMap.TryGetValue(assemblyName.Name, out var targetVer)) { assemblyName.Version = targetVer; return Assembly.Load(assemblyName); } return null; };
这段代码会在程序集加载失败时,强制加载你指定的版本,绕开主应用的配置限制。
3. 私有目录单独加载
把冲突的程序集放到插件自己的私有文件夹里,手动加载,不和主应用的程序集混用:
- 插件项目里设置
CopyLocal=true,确保Microsoft.IdentityModel.Abstractions这类冲突程序集被复制到输出目录的子文件夹(比如叫libs)。 - 插件初始化的时候先加载这个文件夹里的程序集:
var libFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "libs"); var abstractionsDll = Assembly.LoadFrom(Path.Combine(libFolder, "Microsoft.IdentityModel.Abstractions.dll"));
注意要保证所有用到这个程序集的代码都用手动加载的版本,别混着来。
4. NuGet依赖排除
在项目文件里直接排除冲突的传递依赖,强制用你指定的版本:
<PackageReference Include="Microsoft.Graph" Version="5.44.0"> <ExcludeAssets>runtime</ExcludeAssets> </PackageReference> <PackageReference Include="Microsoft.Identity.Client" Version="4.59.0" /> <PackageReference Include="Microsoft.IdentityModel.Abstractions" Version="6.22.0" />
用ExcludeAssets阻止Microsoft Graph带进来的高版本依赖被加载,强制用你指定的版本。
内容的提问来源于stack exchange,提问作者Wolfgang Liebich
相关产品推荐
相关产品推荐

