如何使用FileCodeModel在VB中检测枚举值的属性

时间:2018-08-15 15:25:54

标签: visual-studio vsx

在我的Visual Studio程序包中,我对FileCodeModel中的CodeElements进行了递归扫描。特别是,我想检测代码文件中的所有属性。

我发现,与枚举值关联的属性由CodeElements表示(如果它们是在C#中定义的,而不是在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

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

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

有人知道在FileCodeModel中显示这些属性的方法吗?

我认为这可能在过去已经奏效并且已被打破,但是我不确定100%是否能做到这一点。

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

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

1 个答案:

答案 0 :(得分:1)

我转载了这个问题,这是罗斯林的一个错误。自Visual Studio 2015以来,EnvDTE文件代码模型基于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对抗。