VS Code OmniSharp加载指定Dataflow程序集报错求助
OmniSharp启动异常处理操作指引
基础环境与异常现状
- 当前开发环境配置:仅安装.NET 5.0.103、Unity开发组件,VS Code未安装其他第三方扩展,此前OmniSharp服务可正常运行,当前启动时触发服务加载失败,中断日常开发流程。
- 异常触发时机:VS Code启动后自动初始化OmniSharp工作区阶段。
原始报错堆栈
[第一类异常:项目系统初始化失败] System.BadImageFormatException: 无法加载文件或程序集'System.Threading.Tasks.Dataflow, Version=4.6.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。该文件或目录已损坏且无法读取(HRESULT异常:0x80070570)。 堆栈跟踪: 位于 OmniSharp.MSBuild.ProjectManager..ctor(ILoggerFactory loggerFactory, MSBuildOptions options, IEventEmitter eventEmitter, IFileSystemWatcher fileSystemWatcher, MetadataFileReferenceCache metadataFileReferenceCache, PackageDependencyChecker packageDependencyChecker, ProjectLoader projectLoader, OmniSharpWorkspace workspace, IAnalyzerAssemblyLoader analyzerAssemblyLoader, ImmutableArray`1 eventSinks, DotNetInfo dotNetInfo) 位于 OmniSharp.MSBuild.ProjectSystem.Initalize(IConfiguration configuration),对应代码路径D:\a\1\s\src\OmniSharp.MSBuild\ProjectSystem.cs:line 108 位于 OmniSharp.WorkspaceInitializer.Initialize(IServiceProvider serviceProvider, CompositionHost compositionHost),对应代码路径D:\a\1\s\src\OmniSharp.Host\WorkspaceInitializer.cs:line 54 [第二类异常:资源析构失败] System.NullReferenceException: 未将对象引用设置到对象的实例。 堆栈跟踪: 位于 OmniSharp.MSBuild.ProjectManager.DisposeCore(Boolean disposing),对应代码路径D:\a\1\s\src\OmniSharp.MSBuild\ProjectManager.cs:line 156 位于 OmniSharp.Utilities.DisposableObject.Finalize(),对应代码路径D:\a\1\s\src\OmniSharp.Shared\Utilities\DisposableObject.cs:line 13
分步解决操作
- 第一步:清除损坏的OmniSharp本地缓存
删除用户目录下的OmniSharp缓存全量内容,路径为:%USERPROFILE%\.omnisharp
该操作可直接移除已损坏的System.Threading.Tasks.Dataflow残留文件,匹配报错中“HRESULT 0x80070570(文件损坏无法读取)”的诱因。 - 第二步:锁定适配.NET 5.0的OmniSharp版本
关闭OmniSharp插件的自动更新机制,切勿使用OmniSharp插件默认自动推送的最新版本,需将插件版本固定为1.37.x系列。该版本是最后一个完整兼容.NET 5.0运行时的稳定分支,避免高版本插件依赖的高版本.NET runtime组件与当前环境不匹配。 - 第三步:修复本地.NET运行时损坏
以管理员权限启动命令终端,执行全量.NET环境修复命令:dotnet repair --all
命令执行完成后重启系统,重新打开VS Code触发OmniSharp初始化流程。 - 第四步:配置Unity场景的MSBuild解析规则
在VS Code用户配置中新增规则,避免OmniSharp错误加载系统目录下的损坏程序集:"omnisharp.msbuildResolveCondition": "!Exists('$(MSBuildBinPath)\\Microsoft.Common.props')"
内容的提问来源于stack exchange,提问作者Lithifus
相关产品推荐
相关产品推荐

