在我的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存在相同的问题。
答案 0 :(得分:1)
我转载了这个问题,这是罗斯林的一个错误。自Visual Studio 2015以来,EnvDTE文件代码模型基于Roslyn。这可能一直工作到Visual Studio 2013。
我已经在GitHub上提交了一个带有该错误确切位置的错误:
作为解决方法,直到解决此问题为止,如果您的扩展程序仅针对VS 2015及更高版本,则可以避免EnvDTE并直接与Roslyn对抗。