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

类库SendEmail方法通过接口调用报MissingMethodException,主项目运行正常

问题分析与解决方案

可能原因

  • Microsoft.Graph 包版本不匹配:类库与ASP.NET Core主项目引用的Microsoft.Graph或Microsoft.Graph.Core包版本不一致。控制器直接使用主项目的包版本可正常运行,但类库依赖的版本与主项目加载的版本存在方法签名差异,导致运行时找不到PostAsync()方法。
  • 绑定重定向失效:.NET 6虽自动处理绑定重定向,但版本冲突时可能未生成正确的绑定规则,导致加载错误版本的程序集。
  • 构建缓存残留:旧的程序集缓存未清理,运行时加载了过时的Microsoft.Graph程序集。
  • 依赖传递异常:类库的依赖未正确传递到主项目,或主项目的包版本覆盖了类库的依赖版本。

解决步骤

1. 统一Graph包版本

  • 检查类库和主项目的csproj文件,确保Microsoft.Graph和Microsoft.Graph.Core的引用版本完全一致。
  • 推荐在解决方案级别统一管理版本:在根目录创建Directory.Packages.props文件,强制所有项目使用相同版本的包:
<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="Microsoft.Graph" Version="4.56.0" />
    <PackageVersion Include="Microsoft.Graph.Core" Version="2.0.14" />
  </ItemGroup>
</Project>

2. 清理缓存并重建

  • 执行dotnet clean清理解决方案,手动删除所有项目的bin和obj文件夹。
  • 运行dotnet build重新构建整个解决方案,确保生成最新的程序集。

3. 验证依赖树

  • 在主项目目录下运行dotnet list package,查看Microsoft.Graph的实际版本,确认无冲突版本被引入。
  • 若存在版本冲突,优先通过统一包版本解决,而非调整依赖传递规则。

4. 检查程序集加载情况

  • 在主项目的Program.cs中添加日志代码,查看运行时加载的Microsoft.Graph版本:
AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
{
    if (args.LoadedAssembly.FullName.Contains("Microsoft.Graph"))
    {
        Console.WriteLine($"Loaded Graph assembly: {args.LoadedAssembly.FullName}");
    }
};
  • 启动应用后查看控制台输出,若加载的版本与项目引用不一致,找到并删除残留的旧版本程序集(通常在发布目录或缓存目录)。

5. 确认目标框架一致性

  • 检查类库项目的csproj文件,确保<TargetFramework>设置为net6.0,与主项目完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:12:38