如何从完全限定名(FQN)定位对应的NuGet包?
问题:如何从完全限定名(FQN)推断对应的NuGet包?
我尝试编译一段旧帖子里的C#代码,代码引用了以下命名空间:
using System; // < ... 省略其他引用 ... > using Roslyn.Compilers; using Roslyn.Compilers.CSharp; using Roslyn.Services; using Roslyn.Services.CSharp;
遇到的困境:
- 使用pip或npm这类工具时,通常能通过完全限定名(FQN)直接找到对应包
- 但用NuGet时,不管是直接搜索还是谷歌查找,都找不到
Roslyn.Compilers.CSharp这类匹配原始FQN的包
我盲目尝试了几个NuGet搜索结果靠前的包,均未解决问题:
$ nuget install Roslyn.Compilers.CSharp # 直接用原始FQN,无法生效 # ... 省略错误输出 ... Unable to find package 'Roslyn.Compilers.CSharp' $ nuget install Microsoft.Net.Compilers.Toolset # NuGet搜索结果第1个 $ nuget install Microsoft.CodeAnalysis.Compilers # NuGet搜索结果第2个 $ nuget install Microsoft.CodeAnalysis # NuGet搜索结果第3个
最终仍收到编译错误:
main.cs(5,7): error CS0246: The type or namespace name `Roslyn' could not be found. Are you missing an assembly reference?
请问如何系统地从完全限定名(FQN)推断出对应的NuGet包?
解决方案
1. 先解决当前Roslyn命名空间的问题
你使用的是早期Roslyn版本的命名空间(Roslyn.Compilers、Roslyn.Services),如今Roslyn已成为微软官方项目,所有旧的Roslyn.*命名空间已被弃用,迁移至Microsoft.CodeAnalysis体系下,对应的旧包也已从NuGet官方源移除。
若要让代码正常编译,需替换为新的命名空间:
// 替换原Roslyn.Compilers相关引用 using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; // 替换原Roslyn.Services相关引用 using Microsoft.CodeAnalysis.Workspaces; using Microsoft.CodeAnalysis.CSharp.Workspaces;
对应的NuGet包为Microsoft.CodeAnalysis.CSharp.Workspaces,安装命令:
nuget install Microsoft.CodeAnalysis.CSharp.Workspaces
2. 通用的FQN推断NuGet包方法
后续遇到类似问题,可按以下步骤操作:
- 搜索命名空间归属:直接搜索“[目标命名空间/类型名] NuGet package”,通常能找到官方文档或社区说明,明确对应的包
- 使用NuGet搜索的内容检索功能:在NuGet搜索界面,选择“搜索包内容”选项,输入完整的命名空间或类型名,可精准定位包含该内容的包
- 借助.NET API文档:搜索目标类型的完全限定名,文档页面会标注它所属的NuGet包及程序集信息
- 检查弃用提示:不少旧命名空间对应的包会被标记为弃用,详情页会给出替代包的信息
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

