【问题标题】:How can I detect attributes on enum values in VB, using the FileCodeModel如何使用 FileCodeModel 检测 VB 中枚举值的属性
【发布时间】:2018-08-17 06:16:24
【问题描述】:

在我的 Visual Studio 包中,我使用 FileCodeModel 中的 CodeElements 的递归扫描。特别是,我想检测代码文件中的所有属性。

我发现与枚举值关联的属性如果在 C# 中定义,则由 CodeElements 表示,但如果在 VB 中定义,则不是。

C# 中的示例:

[Description("Enumeration test")]
enum testEnum
{
  [Description("Number one")]
  one,
  [Description("Number two")]
  two
}

VB 中的示例:

<Description("Enumeration test")>
Enum testEnum
  <Description("Number one")>
  One
  <Description("Number two")>
  Two
End Enum

在这两种情况下,与枚举本身关联的描述属性都在 FileCodeModel 中表示。

与枚举值关联的描述属性仅包含在 C# 版本的 FileCodeModel 中。

有人知道如何让这些属性显示在 FileCodeModel 中吗?

我认为这在过去可能有效并且被破坏了,但我不能 100% 确定这一点。

如果有帮助,我可以提供示例代码,但我想制作一个干净的示例程序,而不仅仅是从我的项目中复制代码。

注意:大约两周前,我已经问过或多或少相同的问题on a Microsoft forum,所以从某种意义上说,这是一个重复的问题。对该问题的唯一答复建议使用 CodeModel 而不是 FileCodeModel,但我的实验表明 CodeModel 存在相同的问题。

【问题讨论】:

    标签: visual-studio vsx


    【解决方案1】:

    我已经重现了这个问题,这是 Roslyn 中的一个错误。 EnvDTE 文件代码模型自 Visual Studio 2015 起就基于 Roslyn。这可能一直有效到 Visual Studio 2013。

    我已经在 GitHub 上提交了一个错误,其中包含错误的确切位置:

    EnvDTE.CodeVariable.Attributes returns empty collection for VB.NET enum members (it works for C# enum members)

    在修复之前,作为解决方法,如果您的扩展仅针对 VS 2015 及更高版本,您可以避免使用 EnvDTE 并直接针对 Roslyn。

    【讨论】:

    • 感谢 Carlos,过去 20 年来我一直在向您学习。我会去看看 Roslyn,我从来没有真正喜欢过使用 FileCodeModel。
    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 2018-05-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多