Windows Server 2016执行dotnet exec时TypeLoadError问题排查咨询
针对你遇到的System.TypeLoadException: Could not load type 'System.Runtime.Remoting.Proxies.RealProxy'错误,我分享几个实际排查的方向,帮你定位问题:
先替换手动
dotnet exec命令为官方dotnet ef工具
你当前手动构造的dotnet exec命令很容易因为路径、环境变量配置出错,先简化测试:在服务器上进入你的迁移项目目录,直接执行:dotnet ef database drop -f --context DbContextAuth --verbose如果这个命令能正常执行,说明问题出在你手动拼接的
dotnet exec参数上(比如--additionalProbingPath路径不正确,或者dll路径有误);如果还是报错,再继续排查环境问题。确认服务器上的.NET Core Runtime/Desktop Runtime版本
虽然你安装了SDK 2.2.3,但WPF桌面应用需要** .NET Core Desktop Runtime**(而非单纯的ASP.NET Core Runtime)。执行dotnet --info查看服务器上的运行时列表,确认是否存在Microsoft.NETCore.App 2.2.x和Microsoft.WindowsDesktop.App 2.2.x两个运行时。如果缺失,重新下载安装对应版本的.NET Core 2.2桌面运行时。检查EF Core Tools与项目依赖的版本一致性
你命令中调用的是EF Core Tools 2.2.0,需要确认你的MigrationsTest项目中引用的Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Tools等包版本是否也是2.2.x(最好和工具版本完全一致,比如都是2.2.0或2.2.3)。版本不匹配很容易导致类型加载异常。验证服务器系统补丁与.NET Framework兼容性
Windows Server 2016需要安装最新的累积更新才能很好地支持.NET Core 2.2和.NET Framework 4.7.2/4.8。有些旧补丁会导致.NET类型加载的兼容性问题,建议先给服务器安装所有可用的Windows更新,再重新测试。检查运行时架构匹配
确认本地开发机和服务器上的dotnet架构一致:执行dotnet --info看“Architecture”字段,本地是x64的话,服务器也应该用x64的.NET Core SDK/Runtime。如果服务器装了x86版本,可能会因为位数不匹配导致类型加载失败。排查文件权限与部署完整性
确保服务器上的MigrationsTest项目文件完整,所有依赖的dll都存在;同时运行命令的用户对项目目录、NuGetFallbackFolder(C:\Program Files\dotnet\sdk\NuGetFallbackFolder)有读取权限。权限不足可能导致无法加载依赖的程序集,间接引发TypeLoadException。
如果以上步骤都试过还是不行,可以尝试在服务器上创建一个最小的测试项目(只包含EF Core迁移和DbContext),用dotnet ef命令测试,看是否能正常执行,逐步缩小问题范围。
内容的提问来源于stack exchange,提问作者klawusel

