并行使用Microsoft.Graph与Microsoft.Graph.Beta遇类型冲突问题求助
解决ASP.NET Core并行使用Microsoft.Graph和Microsoft.Graph.Beta的类型冲突问题
1. 补全csproj的包别名配置
你已经给Beta包添加了别名,为了彻底区分两个SDK,建议给正式版包也加上别名,修改后的csproj配置如下:
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraphBeta" Version="1.25.10" Aliases="MSGraphBeta"/> <PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="1.25.10" Aliases="MSGraph"/>
2. 在代码文件中声明程序集别名
在需要使用Graph SDK的代码文件最顶部(所有using语句之前),添加以下代码:
extern alias MSGraphBeta; extern alias MSGraph;
然后根据需求引用对应的命名空间:
- 要使用正式版的
GraphServiceClient,写这行:
using MSGraph::Microsoft.Graph;
- 要使用Beta版的类型,写这行:
using MSGraphBeta::Microsoft.Graph.Beta; // 若Beta版中也存在Microsoft.Graph下的重复类型,替换为: // using MSGraphBeta::Microsoft.Graph;
3. 依赖注入时明确区分客户端
在Program.cs(或Startup.cs)里注册客户端时,分别调用对应的扩展方法:
// 注册正式版Graph客户端 builder.Services.AddMicrosoftGraph(builder.Configuration.GetSection("Graph")); // 注册Beta版Graph客户端 builder.Services.AddMicrosoftGraphBeta(builder.Configuration.GetSection("GraphBeta"));
如果注入时遇到类型冲突,可以通过命名服务或显式指定泛型参数来区分。
报错原因
GraphServiceClient类型同时存在于正式版和Beta版的程序集中,哪怕你只写了using Microsoft.Graph;,编译器仍会从两个程序集里找到同名类型,导致冲突。通过程序集别名+extern alias的方式,能强制指定使用哪个程序集下的类型,彻底解决这个问题。
内容的提问来源于stack exchange,提问作者Agyss
相关产品推荐
相关产品推荐

