【问题标题】:How to get various types used in a C# project with Roslyn如何使用 Roslyn 获取 C# 项目中使用的各种类型
【发布时间】:2016-01-28 09:48:18
【问题描述】:

我正在分析将现有 C# 库转换为 java。首先,我需要知道现有 C# 库中使用的类型/内置关键字是什么。我的意思是,例如

public class CSharpClass
{
int i;
float j;
Console.Writeline(String.Concat("A","B"));
}

在这个类中,使用的类型/关键字是,

  1. 公开
  2. int
  3. 浮动
  4. 控制台
  5. 字符串

我的问题是,

  1. 有没有办法做到这一点。我希望我能和罗斯林一起做这件事。但是我们可以获得变量的“LocalDeclarationStatementSyntax”。但是如何解析“Console”和“Concat”。解析类中所有标记的“Sytax walker”是唯一的选择吗?
  2. 另外如何使用 Roslyn 从项目文件中获取所有类?

【问题讨论】:

  • 你能澄清一下你到底想要什么以及为什么?为什么说类型,然后在列表中包含public?你只关心明确提到的类型,还是隐含的?例如,如果代码为var x = new int[0].ToList();,是否应包括EnumerableList<int>(或List<T>?)类型?
  • Console 和 String 不是关键字。您是否在寻找关键字或标识符(或令牌类型)?或者,您想要更高的级别并了解所有符号吗?

标签: c# roslyn built-in-types roslyn-code-analysis


【解决方案1】:

你也需要语义——语法就是你看到的文本,这正是你得到的,不多也不少。为你的项目获取一个Compilation,然后你可以调用GetSemanticModel,在那里你给它一棵树,​​然后你可以从那里调用GetTypeInfoGetSymbolInfo(酌情在网上搜索这两者之间的区别)获取类型信息。

就获取Compilation 而言,如果您正在编写命令行工具,您可能希望使用MSBuildWorkspace 来加载您的项目。如果您正在分析在 Visual Studio 中打开的项目,请使用 VisualStudioWorkspace 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多