Roslyn:如何使用 Roslyn C# 获取声明语法的命名空间

2024-04-08

我有一个包含一些类文件的 C# 解决方案。借助 Roslyn,我能够解析解决方案以获取解决方案中的项目列表。从那里,我可以获得每个项目中的文档。然后,我可以获得每个 ClassDeclarationSyntax 的列表。这是起点。

        foreach (var v in _solution.Projects)
        {
            //Console.WriteLine(v.Name.ToString());
            foreach (var document in v.Documents)
            {
                SemanticModel model = document.GetSemanticModelAsync().Result;
                var classes = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType<ClassDeclarationSyntax>();
                foreach(var cl in classes)
                {
// Starting around this point...
                    ClassDiagramClass cls = new ClassDiagramClass(cl, model);
                    diagramClasses.Add(cls);
                }
            }
        }

我希望能够从这些对象中获取每个类中使用的变量的命名空间。请参阅文件 1 有一个方法“getBar()”,该方法返回 B.Bar 类型的对象。命名空间很重要,因为它告诉您真正返回的是哪种类型的 Bar。

File1.cs

using B;
namespace A {
    public class foo(){
        public Bar getBar(){ return new Bar();}
    }
}

File2.cs

namespace B {
    public class Bar(){
    }
}

File3.cs

namespace C {
    public class Bar(){
    }
}

问题是我不确定如何从我现在在代码中的位置获取命名空间值。有任何想法吗?


命名空间是语义信息,因此需要从语义模型中获取:

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

Roslyn:如何使用 Roslyn C# 获取声明语法的命名空间 的相关文章

  • 从实体获取单列

    如何从查询中获取单个列而不是整个对象 我可以这样做来获取整个对象 但我想要的只是名称 IList
  • std::list::clear 是否会使 std::list::end 迭代器无效?

    检查这个代码 include stdafx h include
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 如何使用 C# 以编程方式编辑 Power BI Desktop 文档参数或数据源?

    我有一个在 Power BI Desktop 中内置的报告模板 并保存为 pbix 或 pbit 文件 该模板使用DirectQuery SQL数据库作为数据源 而服务器地址和数据库名称被提取到参数中 还有一个参数包含一个ReportId
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • C# Winforms Designer 无法打开,因为它无法在同一程序集中找到类型

    我收到以下错误 找不到类型 My Special UserControl 请确保引用包含此类型的程序集 如果此类型是您的开发项目的一部分 请确保已使用当前平台或任何 CPU 的设置成功构建该项目 但没有任何意义的是My Special Us
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig

随机推荐

  • Double Not Exists SQL逻辑解释

    有 2 张表 一张称为 drinkers 有一列名称 另一个称为 frequents 有 2 列 即 drinkers 和 bars 他们经常光顾的 我有一个查询可以回答此声明 Drinkers who frequent all bars
  • Android:以编程方式从剪贴板中删除单个项目

    Android 剪贴板服务允许您将文本或其他项目添加到剪贴板中 在大多数 Android 设备上 Clipdata 项目将被插入到未定义最大内容数的堆栈中 我的问题如下 我有一个密码管理器应用程序 可以将选定的密码插入剪贴板 但由于密码是高
  • 如何在Delphi中一次正确地释放包含各种类型的记录?

    type TSomeRecord Record field1 integer field2 string field3 boolean End var SomeRecord TSomeRecord SomeRecAr array of TS
  • CompiledQuery 与 List.Contains (where...in list) 功能?

    我正在尝试使用 Linq to Entities 编写 CompiledQuery 它将替换采用两个数组 在本例中为逗号分隔的 TEXT 参数的存储过程 本质上 SQL 是这样的 Stored Proc definition ArrayPa
  • PHP 到期日期

    背景信息 我正在为游戏 garrys mod 创建一个捐赠 购买系统 当用户通过 paypal 捐赠时 我有 php 代码来处理 iPN 并将数据输入数据库 它还会生成一个序列密钥并将其通过电子邮件发送给用户 然后用户可以在游戏中输入该密钥
  • 玩!无法将 java 列表转换为 scala 列表

    我正在尝试将字符串列表从 java 控制器传递到 scala 模板 这是查看代码 public static Result index List
  • 如何从 JavaScript 通过 TCP 套接字进行通信?

    我正在考虑 AJAX 应用程序必须轮询更新是多么的限制 而 javascript 最好能够建立到服务器的真正的双向连接 我想知道是否有某种方法将 javascript 与浏览器插件集成 可以建立 TCP 连接 以便我可以将数据传入和传出浏览
  • 如果用户在 WPF 中键入任何内容,请检查密码框

    我在用PasswordBox我想检测用户何时输入任何内容 如果是 我需要将按钮状态更改为启用 如何检查用户是否输入任何内容 在里面PasswordBox 它的行为不同于TextBox因为你不能将它绑定到文本 当用户输入任何内容时会引发一些事
  • 是否可以通过 FTP 代理使用 C# FtpWebRequest?

    据我了解 FtpWebRequest Proxy属性表示 HTTP 代理 我必须通过 FTP 代理向外部服务器发出 FTP 请求 到目前为止 我实现此功能的唯一方法是创建一个使用 Windows FTP 命令的脚本并以这种方式下载 是否可以
  • 如何在 Angular 应用程序中存储身份验证令牌

    我有一个与 REST API 服务器通信的 Angular 应用程序 SPA 我有兴趣找到存储从 API 服务器返回的访问令牌的最佳方法 以便 Angular 客户端可以使用它来验证未来的请求到 API 出于安全原因 我想将其存储为浏览器会
  • 静态转换与动态转换

    假设我有一个充满继承性的 C 库 我得到了一个Base 当我知道它实际上指向一个函数时Derived对象和Derived继承Base 但我不知道它是什么类型的继承 公共 受保护 私有 我也不知道层次结构中是否有虚函数 鉴于这种情况 无需查看
  • 如何找到 Postgres / PostgreSQL 表及其索引的磁盘大小

    我从 Oracle 转到 Postgres 并寻找一种方法来查找表和索引大小 bytes MB GB etc 或者甚至更好的所有表的大小 在 Oracle 中 我有一个令人讨厌的长查询 它查看 user lobs 和 user segmen
  • 多重继承:包含 super() 调用的重写方法

    使用文件 super5 py class A def m self print m of A called class B A def m self print m of B called super m class C A def m s
  • 如何在数据库中存储很旧的日期?

    这实际上不是我遇到的问题 但想象一下有人正在建立一个有关中世纪的网站并想要存储日期 他们会如何做 MySQL 规范DATE说它不会低于 1000 年 当格式为YYYY MM DD 您如何存储有关的信息苏格兰国王肯尼思二世去世 http en
  • Bootstrap 4 无线电验证

    我需要在使用 Bootstrap 4 的页面中使用 Radio 元素进行表单验证方面的一些帮助 我需要在单选元素下方添加错误消息 div class invalid feedback Please choose an option div
  • 如何使用Control.FromHandle?

    我看到一个名为 Control FromHandle 的方法 它 应该 允许您访问它 现在 我想使用这段代码尝试一下 DllImport user32 dll SetLastError true static extern IntPtr F
  • write 函数在 Unix 上需要 unistd.h,那么 Windows 上呢?

    我已经从 Linux 计算机更改为 Windows 但在编译代码时遇到了问题 因为这两个操作系统不共享相同的头文件 由于unistd h没有明显包含在内 Visual C不知道什么read write close socklen t and
  • 当其中一个参数中有空格时,nodeJS child_process.spawn 不起作用

    我正在尝试使用child process spawn功能 语法是 child process spawn command args options 每当我在 args 数组的任何元素中包含空格时 该命令都会简单地发出参数 这是我用来测试它的
  • 适用于多个应用程序的 OWIN 身份验证服务器

    我正在实现一个解决方案 该解决方案具有 MVC 客户端 让我们在 localhost 4077 调用此 CLIENT 和 WebAPI 服务 在 localhost 4078 调用 API 我已经在 API 中实现了 OWIN OAuth
  • Roslyn:如何使用 Roslyn C# 获取声明语法的命名空间

    我有一个包含一些类文件的 C 解决方案 借助 Roslyn 我能够解析解决方案以获取解决方案中的项目列表 从那里 我可以获得每个项目中的文档 然后 我可以获得每个 ClassDeclarationSyntax 的列表 这是起点 foreac