升级至ASP.NET Core 2.0后遭遇MissingMethodException问题求助
ISession.CommitAsync()方法找不到的问题 这种问题我之前升级.NET Core版本时也踩过坑,大概率是程序集版本冲突或者依赖项未正确对齐导致的,给你几个实用的排查和解决方向:
统一所有项目的SDK和目标框架版本
确保解决方案里的所有项目(包括类库)都明确指定了.NET Core 2.0作为目标框架,同时SDK版本要统一。可以检查项目的.csproj文件,确认所有项目都有:<TargetFramework>netcoreapp2.0</TargetFramework>另外,项目根目录的
global.json文件要指定对应的2.0.x稳定版SDK,比如:{ "sdk": { "version": "2.0.9" } }避免混合使用不同版本的SDK,比如同时装了2.1+版本但项目没同步更新,很容易引发版本混乱。
清理旧构建文件并重新还原依赖
旧的bin和obj文件夹里可能残留了低版本的程序集,先手动删除这些文件夹,或者用命令清理:dotnet clean然后执行完整的依赖还原:
dotnet restore如果怀疑NuGet缓存有问题,也可以清空缓存再还原:
dotnet nuget locals all --clear对齐所有AspNetCore相关包的版本
确保所有Microsoft.AspNetCore系列的NuGet包版本都是2.0.x,不要混合1.x或更高版本的包。比如在.csproj里统一修改:<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.0.9" /> <PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.9" />你提到安装的
Microsoft.AspNetCore.Http.Features在.NET Core 2.0中其实是Microsoft.AspNetCore.Http的一部分,单独安装反而可能引入不匹配的版本,建议卸载这个单独的包,依赖SDK自带的版本即可。检查运行时环境
用dotnet --info命令确认本地或服务器的运行时版本是否为.NET Core 2.0,虽然高版本运行时通常兼容,但偶尔会出现程序集加载优先级的问题,确保运行时和项目版本一致能避免很多奇怪的错误。
至于为什么智能感知正常但运行时报错:智能感知是基于项目引用的程序集元数据展示的,但运行时加载的是输出目录里的实际程序集,如果输出目录里的程序集版本比项目引用的旧,就会出现这种“编译时能看到,运行时找不到”的情况——这也是清理bin/obj和重新还原的核心原因。
内容的提问来源于stack exchange,提问作者Daniel Bretzigheimer




