如何使用 FileCodeModel 检测 VB 中枚举值的属性
How can I detect attributes on enum values in VB, using the FileCodeModel
在我的 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
在这两种情况下,与枚举本身关联的 Description 属性都在 FileCodeModel 中表示。
与枚举值关联的 Description 属性仅包含在 C# 版本的 FileCodeModel 中。
有人知道让这些属性显示在 FileCodeModel 中的方法吗?
我认为这可能在过去有效但已被破坏,但我对此不是 100% 确定。
如果有帮助,我可以提供示例代码,但我想制作一个干净的示例程序,而不是仅仅从我的项目中复制代码。
注意:大约两周前我已经问过或多或少相同的问题 on a Microsoft forum,所以从某种意义上说这是一个重复的问题。该问题的唯一回复建议使用 CodeModel 而不是 FileCodeModel,但我的实验表明 CodeModel 也有同样的问题。
我已经重现了这个问题,这是 Roslyn 中的一个错误。自 2015 年 Visual Studio 以来,EnvDTE 文件代码模型基于 Roslyn。可能这一直有效到 2013 年 Visual Studio。
我已经在 GitHub 上提交了错误,并提供了错误的确切位置:
在修复之前,作为解决方法,如果您的扩展仅针对 VS 2015 及更高版本,您可以避免 EnvDTE 并直接针对 Roslyn 工作。
在我的 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
在这两种情况下,与枚举本身关联的 Description 属性都在 FileCodeModel 中表示。
与枚举值关联的 Description 属性仅包含在 C# 版本的 FileCodeModel 中。
有人知道让这些属性显示在 FileCodeModel 中的方法吗?
我认为这可能在过去有效但已被破坏,但我对此不是 100% 确定。
如果有帮助,我可以提供示例代码,但我想制作一个干净的示例程序,而不是仅仅从我的项目中复制代码。
注意:大约两周前我已经问过或多或少相同的问题 on a Microsoft forum,所以从某种意义上说这是一个重复的问题。该问题的唯一回复建议使用 CodeModel 而不是 FileCodeModel,但我的实验表明 CodeModel 也有同样的问题。
我已经重现了这个问题,这是 Roslyn 中的一个错误。自 2015 年 Visual Studio 以来,EnvDTE 文件代码模型基于 Roslyn。可能这一直有效到 2013 年 Visual Studio。
我已经在 GitHub 上提交了错误,并提供了错误的确切位置:
在修复之前,作为解决方法,如果您的扩展仅针对 VS 2015 及更高版本,您可以避免 EnvDTE 并直接针对 Roslyn 工作。