VS V16.4.1调试.NET Framework4.7.1项目时加载System.Collections.Immutable失败
我之前也碰到过类似的Roslyn编译器依赖问题,尤其是在.NET Framework项目里调试时触发的,给你几个针对性的解决方案,按顺序试试:
优先用NuGet包替代手动DLL引用
手动添加DLL经常会出现版本不匹配或者Roslyn无法识别的问题,直接在NuGet包管理器中搜索并安装System.Collections.Immutable,指定版本为1.2.3.0。安装完成后,检查项目的引用属性,确保“复制本地”设置为True,这样DLL会被复制到输出目录。检查并修复Roslyn编译器包的依赖
你的项目可能引用了Microsoft.CodeDom.Providers.DotNetCompilerPlatform这个包(它负责在项目中嵌入Roslyn编译器),这个包本身依赖特定版本的System.Collections.Immutable。可以尝试:- 在NuGet包管理器中更新这个包到适配.NET Framework 4.7.1的最新兼容版本
- 如果更新后还是有问题,卸载这个包然后重新安装,让NuGet自动处理依赖关系
添加程序集绑定重定向
版本冲突是这类问题的常见原因,在项目的app.config(或web.config)中添加绑定重定向,强制所有版本的System.Collections.Immutable指向你安装的1.2.3.0版本:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>彻底清理并重建Roslyn相关文件
之前删bin/obj可能不够,需要额外删除项目输出目录下的bin\roslyn文件夹(这个文件夹里是Roslyn的编译器文件),然后:- 在VS中执行“清理解决方案”
- 右键项目选择“还原NuGet包”
- 重新构建解决方案
检查VS组件完整性
如果上面的方法都没用,可能是VS 16.4.1本身的Roslyn组件损坏了。打开Visual Studio安装器,选择你的VS安装实例,点击“修改”,然后选择“修复”选项,让安装器修复缺失或损坏的组件。
内容的提问来源于stack exchange,提问作者rory

