获取在另一个程序集/项目中声明的类型的类型信息

2023-12-03

因此,正如标题所示,我正在尝试使用 Roslyn 从另一个程序集中声明的类型获取类型信息。最初,我尝试通过手动查看引用的程序集来做到这一点,但意识到我没有命名空间信息。

我期待以下工作:

  var workSpace = Roslyn.Services.Workspace.LoadSolution(solFilePath);

  IDocument file = null;
  IProject proje = null;

  Compilation compilation = Compilation.Create("Test");
  List<CommonSyntaxTree> trees = new List<CommonSyntaxTree>();

  foreach (var proj in workSpace.CurrentSolution.Projects)
  {
    foreach (var doc in proj.Documents)
    {
      if (doc.FilePath.ToLower() == filePath.ToLower())
      {
        file = doc;
        proje = proj;
      }
      else trees.Add(doc.GetSyntaxTree());
    }
  }

  var targetTree = file.GetSyntaxTree();

  trees.Add(targetTree);
  var compilation2 = (Compilation)compilation.AddSyntaxTrees(trees);

  var semanticModel = compilation2.GetSemanticModel(targetTree);

  var root = targetTree.GetRoot();

  var className = root.DescendantNodes().OfType<ClassDeclarationSyntax>().ToList().ElementAt(1);

  var properties = className.DescendantNodes().OfType<PropertyDeclarationSyntax>()
      .Where(p => p.Modifiers.Select(syn => syn.ToString().ToLower() == "public").Count() > 0).ToList();

  var typeInfo = semanticModel.GetTypeInfo(properties.First());

  var property = properties.First();

  var symbol = semanticModel.GetDeclaredSymbol(property);

  var symbol2 = semanticModel.GetSymbolInfo(property);

Neither typeInfo nor typeSyntax其中有我需要的信息,我在这里做错了什么?

这是我正在解析的类:

   class Foo
  {
    public Bar bar { get; set; }

    public Foo() { }

    public int GetInt(Bar bar, int ret = 5 ){
      return ret;
    }
  }

我正在尝试获取有关的类型信息Bar在另一个程序集中定义的类。

谢谢你的帮助。


不要打电话GetTypeInfo。相反,一旦你拥有了PropertyDeclarationSyntax, call GetDeclaredSymbol使用该声明语法,您将得到IPropertySymbol对于该财产。从那里,你可以抓住IPropertySymbol.Type,这就是您正在寻找的类型。

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

获取在另一个程序集/项目中声明的类型的类型信息 的相关文章

随机推荐

  • 使用 Jenkins 部署到 VPN

    我的总体目标是自动部署到 VPN 中的服务器 目前的 VPN 是 Cisco AnyConnect 和 Barracuda 但如果有更通用的解决方案就更好了 我考虑过使用 Jenkins 但我发现的唯一相关资源是这个插件https wiki
  • Stroustrup:对于 C++,如何安装 FLTK 库?

    问 有人可以指导我如何安装适用于 Microsoft Visual Studio 2015 的 FLTK 以便我可以将 FLTK 用于 C 吗 额外的信息 Bjarne Stroustrup 的 编程 使用 C 的原理与实践 中的第 12
  • 将运行时参数传递给 odeint 积分器

    我想使用 odeint boost 积分器来查看克尔时空中的测地线 这需要为各种参数值运行积分器 我有初始条件和初始动量向量 因此系统的角动量将根据我想要如何启动它而变化 我一直在关注这里列出的优秀示例 http headmyshoulde
  • 在 Maven 中,模块是否受存储库的 updatePolicy 影响?

    这就像我问的另一个问题一样 但不是依赖关系 而是关于模块 让我举一个场景 你有一个多module项目和部署该项目的持续集成服务器 这将部署到您本地的存储库settings xml has an updatePolicy of always
  • 如何更改函数内数据框列表中的列名称?

    我知道 如何更改数据帧列表中的名称 的答案已被多次回答 但是 我一直试图生成一个函数 该函数可以将任何列表作为参数并更改列表中所有数据帧的所有列名称 我正在处理大量 csv 文件 所有这些文件都具有相同的 3 列名称 我按如下方式分组导入文
  • Android 上的 Firebase 未调用 setValue onComplete

    我使用安全规则来确定在哪些条件下可以将值写入数据库 目前我已经设置了安全规则 这些规则工作正常 我用模拟器检查过 所以到目前为止没有问题 如果写入权限被拒绝 不满足安全规则 我想采取一些措施 为了做到这一点 我计划在 setValue 上使
  • 使用 Angular 2 Rxjs 计算每秒按键次数

    Created by darius on 02 04 16 import Component from angular2 core import Observable from rxjs Rx Component styles requir
  • 添加自定义标记到地图 - Android

    我目前有一个使用 MapView 向用户显示谷歌地图的应用程序 我一直在尝试使用此代码在地图上放置标记 public boolean onTouchEvent MotionEvent event MapView mapView if eve
  • Flink 可以将结果写入多个文件(如 Hadoop 的 MultipleOutputFormat)吗?

    我正在使用 Apache Flink 的 DataSet API 我想实现一项将多个结果写入不同文件的作业 我怎样才能做到这一点 您可以将任意数量的数据接收器添加到DataSet根据您的需要进行编程 例如在这样的程序中 ExecutionE
  • 从 R 中的字符向量中删除引号

    假设您有一个字符向量 char lt c one two three 当您引用索引值时 您会得到以下信息 gt char 1 1 one 如何从返回值中去掉引号以获得以下内容 1 one 试试 noquote a 无引号 a 1 a
  • 缓存预留策略:写入后删除还是更新缓存?

    我试图了解有关缓存预留策略的一些信息 如果找到则从缓存中读取数据 缓存命中 如果未找到 缓存未命中 则从数据库读取数据 在缓存中更新 在写入时 它被放入主数据库中 然后应该通过以下方式更新缓存 A 删除缓存中对应的条目 这样下次读取会遇到缓
  • 如何在PHP中提取锚标记之间的文本? [复制]

    这个问题在这里已经有答案了 我的变量中有一个字符串 标题为 message如下 message posted an event in a href http 52 1 47 143 group 186 TEST PRA a 我只想获取锚标记
  • PHP中如何检查数据格式

    我正在尝试检查日期格式 看看是否可以检查数据变量是否具有特定格式 例如 MM DD YYYY 如果没有 则退出 我不确定如何检查格式 如果有人可以帮助我 我将不胜感激 谢谢 date 05 25 2010 if XXXXX do somet
  • 是否可以在 fetchxml 中创建强制转换字段?

    是否可以在 fetchxml 中将字段从标识符转换为字符串 我有这样的疑问 select from table1 t1 left outer join table2 t2 on t1 stringId CAST t2 id as varch
  • 如何制作数组的精确副本?

    我如何制作数组的精确副本 我很难找到有关在 Swift 中复制数组的信息 我尝试使用 copy var originalArray 1 2 3 4 var duplicateArray originalArray copy Swift 中的
  • BigQuery 选择一个时间间隔内的数据

    我的数据看起来像 姓名 来自 前往城市 请求日期 安迪 巴黎 伦敦 2014年8月21日 12 00 莉娜 科隆 柏林 2014年8月22日 18 00 安迪 巴黎 伦敦 2014年8月22日 06 00 丽莎 罗马 尼尔佩尔 2014年8
  • 如何在C++中获取当前时间和日期?

    C 中有没有跨平台的方法来获取当前日期和时间 从 C 11 开始你可以使用std chrono system clock now 示例 复制自en cppreference com include
  • Resteasy 3.09 CorsFilter 问题

    我尝试使用新的CorsFilterResteasy 3 0 9 中提供了该功能 我在本页底部找到了一个示例 使用 JAX RS RESTEasy 实现 CORS 的 Ajax 请求 如果我在方法中定义这个过滤器getSingletons 的
  • 使用数据表求和列值

    我想求和earning代码末尾的列值与总计 我在用Jquery datatable通过此代码过滤记录 但无法编写总计代码 我也tried footer callback of datatable但没有得到想要的结果
  • 获取在另一个程序集/项目中声明的类型的类型信息

    因此 正如标题所示 我正在尝试使用 Roslyn 从另一个程序集中声明的类型获取类型信息 最初 我尝试通过手动查看引用的程序集来做到这一点 但意识到我没有命名空间信息 我期待以下工作 var workSpace Roslyn Service