WPF(.NET Framework4.8)使用Omnisharp语言客户端遇TypeLoadException
解决Omnisharp LSP客户端TypeLoadException问题
问题原因
这个错误通常源于Omnisharp.Extensions.LanguageProtocol包与.NET Framework 4.8的兼容性冲突:
- 新版本包可能不再对.NET Framework 4.8提供完整支持,部分接口实现(如
LanguageClientWorkDoneManager.Handle)采用了仅适配.NET Core/.NET 5+的显式实现逻辑,导致.NET Framework环境下反射加载失败。 - 依赖包版本不匹配,缺少必要的兼容组件。
解决方案
降级到兼容.NET Framework 4.8的包版本
打开NuGet包管理器,将Omnisharp.Extensions.LanguageProtocol及关联依赖(如Omnisharp.Extensions.LanguageServer.Protocol、Omnisharp.Extensions.JsonRpc)降级到明确标注支持net48的版本,例如0.19.0及之前的版本通常适配性较好。统一依赖包版本
检查所有Omnisharp相关包的版本,避免混合不同版本的依赖。可以在项目文件或packages.config中统一指定版本号,示例:<package id="Omnisharp.Extensions.LanguageProtocol" version="0.19.0" targetFramework="net48" /> <package id="Omnisharp.Extensions.LanguageServer.Protocol" version="0.19.0" targetFramework="net48" /> <package id="Omnisharp.Extensions.JsonRpc" version="0.19.0" targetFramework="net48" />配置适配.NET Framework的JSON序列化器
.NET Framework默认使用Newtonsoft.Json,新版本Omnisharp可能默认依赖System.Text.Json,创建LanguageClient时显式指定Newtonsoft序列化器:var client = LanguageClient.Create(options => { // 其他客户端配置 options.WithSerializer(new NewtonsoftJsonSerializer()); });需确保已安装
Omnisharp.Extensions.JsonRpc.Newtonsoft包以获取该序列化器。手动注册WorkDoneManager服务
若上述方法无效,尝试在客户端配置中手动注册ILanguageClientWorkDoneManager实现,绕过自动加载的问题:var client = LanguageClient.Create(options => { // 其他客户端配置 options.AddServices(services => { services.AddSingleton<ILanguageClientWorkDoneManager, LanguageClientWorkDoneManager>(); }); });
内容的提问来源于stack exchange,提问作者Emanuele Goldin
相关产品推荐
相关产品推荐

