如何从 Roslyn 中的 using 指令获取完全限定的命名空间?

2023-11-30

当您将鼠标悬停在“简化”上时usingVS2015 中的指令,它会显示完全限定名称。我如何通过 Roslyn 插件获取此信息?是否会使用一个DiagnosticAnalyzer? A CodeFixProvider?

浏览 source.roslyn.codeplex.com,那里有大量信息,包括如何add a using陈述,以及如何简化类型名称(包括using声明),但我无法弄清楚如何反向获取完全限定的名称。


通过语义模型,您可以检索有关构成代码的语义的信息(显然)——这允许您获取有关类型和其他构造的特定信息。

例如:

void Main()
{
    var tree = CSharpSyntaxTree.ParseText(@"
using X = System.Text;
using Y = System;
using System.IO;

namespace ConsoleApplication1
{
}"
);

    var mscorlib = PortableExecutableReference.CreateFromFile(typeof(object).Assembly.Location);
    var compilation = CSharpCompilation.Create("MyCompilation", syntaxTrees: new[] { tree }, references: new[] { mscorlib });
    var semanticModel = compilation.GetSemanticModel(tree);
    var root = tree.GetRoot();

    // Get usings
    foreach (var usingDirective in root.DescendantNodes().OfType<UsingDirectiveSyntax>())
    {
        var symbol = semanticModel.GetSymbolInfo(usingDirective.Name).Symbol;
        var name = symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
        name.Dump();
    }
}

Output:

全局::系统.文本
全局::系统
全局::系统.IO

如果你使用SymbolDisplayFormat.CSharpErrorMessageFormat相反,您将收到

系统.文本
系统
系统IO

您可以选择您感兴趣的内容,但正如您所看到的,无论有没有别名,它都可以正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Roslyn 中的 using 指令获取完全限定的命名空间? 的相关文章

  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 如何在 JavaScript 中扩展 XMLHttpRequest 对象?

    我想扩展现有的XMLHttpRequest对象 以便它可以与所有浏览器一起使用 现在我已经经历了JS继承然而在开始之前我想看看很好的例子 HTML5 有上传和进度事件的东西 我想在继承的新对象中实现这些东西 即使不支持该功能 也可以通过不向
  • 创建 Java 数组时使用尖括号和方括号方法的区别

    我最近刚刚开始使用 Java 并开始接触数组 据我所知 有两种创建数组的方法 对于有 python 背景的我来说 第一种方法最有意义 type ArrayName i e int agesOfParticipants 然而 许多在线资源使用
  • 保护 PhoneGap 中的敏感信息?

    我有许多想要保护的 REST API 密钥 Google Places 等 阅读 Google Groups 等 似乎混淆不是解决方案 使用钥匙串也不是解决方案 那么当 IPA 包可以解压和读取时 您建议如何加密 保护敏感信息 我不想用 O
  • android-gradle-plugin 1.2.2:标记ignoreFailures导致任务connectedAndroidTest出错

    我更新了我的 build gradle 以使用 android gradle 插件 1 2 2 而不是 1 1 0 dependencies classpath com android tools build gradle 1 2 2 之后
  • 不从 Function App 向 Application Insights 发送数据

    我有 Function App 和 Application Insight 服务 我注意到我的应用程序发送的数据量很大并且产生很大的成本 我可以禁用 完全停止向 AI 发送数据而不删除APPINSIGHTS INSTRUMENTATIONK
  • 使用 javascript / jQuery 更好地实现淡入淡出图像交换

    这不是一个具体的问题或错误 而是一个实施问题 首先我想说 我已经看过很多褪色图像教程 并且对不同类型有基本的了解 我希望这个问题不会与其他数百个有关图像褪色的问题一起被抛弃 这基本上就是我想要的 使用 javascript 最好是 jQue
  • 创建对象:有或没有“new”[重复]

    这个问题在这里已经有答案了 可能的重复 使用 new 实例化对象与不使用 new 实例化对象有什么区别 这可能是一个基本问题 并且可能已经被问过 例如 here 但我还是不明白 那么 让我问一下 考虑以下 C 类 class Obj cha
  • 如何让进度条循环并处于确定模式? [复制]

    这个问题在这里已经有答案了 我必须在设备上下载一些图像和视频 并且我喜欢通过在确定模式下覆盖一个圆形进度条来跟踪进度 问题是 无论如何 ProgressBar 仍然是不确定的 有没有办法让它循环并处于确定模式 Layout
  • 如何确保 Excel 计算在 VBA 过程中完成

    在 Excel 电子表格中 用户定义的函数用于计算电子表格矩阵 复合元素的横截面值 的基本结果 Public Function XSValues inputRange as Range as variant returns an array
  • 如何将字符串公式传递给R的lm并在摘要中查看公式?

    在下面的 R 会话中 summary model 显示公式为model str 我如何让它显示为mpg cyl hp同时仍然能够通过字符串设置模型公式 gt data mtcars gt names mtcars 1 mpg cyl dis
  • Android 中可拖放列表项的 ExpandableListView

    我正在寻找在Android中具有ListItems拖放功能的ExpandableListView 或者有什么好的教程或示例 我在哪里可以学习实现ExpanadableListView的拖放功能 我发现了一些关于实现 ListView 拖放的
  • Spring Boot 缓存功能不需要 spring-boot-starter-cache

    当您尝试使用 Spring Boot 缓存功能时 Cacheable 你不需要启动模块spring boot starter cache这在 Spring Initializr 中被称为 Spring Cache Abstraction v
  • 能够在 Xamarin 中从图库中拍摄或选择照片

    Xamarin Forms iOS 中有没有办法拍照或从图库中选择图像 当您在设备中打开相机时 具有相同的功能 它将使您能够拍照或打开图库 目前 我们建议使用Xamarin Essentials 媒体选择器 正如杰森提到的 The Medi
  • 自定义ViewPager

    我怎样才能创建一个定制的ViewPager 实例化一个页面ViewPager是这样的 public Object instantiateItem View collection int position TextView tv new Te
  • 将 Not In Sub-Select 重写为 Join for Propel

    给出以下架构 person id group id group membership person id group id 我试图使用 Propel 的 Criteria 查找不在某个组内的成员 以下 SQL 将执行此操作 SELECT F
  • ggplot2:Stat_function 对数刻度的错误行为

    我正在尝试绘制对数缩放的点直方图 用点而不是条形显示值的直方图 结果应该是这样的 MWE 让我们模拟一些数据 set seed 123 d lt data frame x rnorm 1000 为了获得点直方图 我需要首先计算直方图数据 h
  • 在Python中使用类定义调用实例方法

    最近 我一直在研究Python的类实例化过程 以真正理解发生了什么在引擎盖下创建类实例时 但是 在玩测试代码时 我遇到了一些我不明白的事情 考虑这个虚拟类 class Foo def test self print I m using te
  • 如何将变量传递到此 Codeigniter 3 应用程序中的 Twig 视图?

    我正在研究一个在线报纸 博客应用程序 with 代码点火器 3 1 8和 Bootstrap 4 我决定向其中添加主题 该应用程序是not HMVC 只有MVC The themes目录在外部应用如下图所示 Inside themes我有主
  • Python递归函数不返回[重复]

    这个问题在这里已经有答案了 我正在尝试解决我儿子在大学计算机科学课上遇到的问题 以提高我的 Python 新手技能 目标是创建一个使用递归来处理列表的函数 该函数必须接受任意长度的列表并返回一个新列表 其中每个元素都是其自身及其右侧元素的总
  • 如何从 Roslyn 中的 using 指令获取完全限定的命名空间?

    当您将鼠标悬停在 简化 上时usingVS2015 中的指令 它会显示完全限定名称 我如何通过 Roslyn 插件获取此信息 是否会使用一个DiagnosticAnalyzer A CodeFixProvider 浏览 source ros