You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从完全限定名(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:34:53