visual-studio - 如何使用 FileCodeModel 检测 VB 中枚举值的属性
问题描述
在我的 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 中表示。
与枚举值关联的描述属性仅包含在 C# 版本的 FileCodeModel 中。
有人知道让这些属性出现在 FileCodeModel 中的方法吗?
我认为这在过去可能有效并且被打破了,但我对此不是 100% 确定的。
如果有帮助,我可以提供示例代码,但我想制作一个干净的示例程序,而不仅仅是从我的项目中复制代码。
注意:大约两周前,我已经在微软论坛上或多或少地问过同样的问题,所以从某种意义上说,这是一个重复的问题。对该问题的唯一答复建议使用 CodeModel 而不是 FileCodeModel,但我的实验表明 CodeModel 有同样的问题。
解决方案
我已经重现了这个问题,这是 Roslyn 中的一个错误。EnvDTE 文件代码模型自 Visual Studio 2015 以来就基于 Roslyn。这可能一直有效到 Visual Studio 2013。
我已经在 GitHub 上提交了一个错误,其中包含错误的确切位置:
EnvDTE.CodeVariable.Attributes 为 VB.NET 枚举成员返回空集合(它适用于 C# 枚举成员)
在修复之前,作为解决方法,如果您的扩展仅针对 VS 2015 及更高版本,您可以避免 EnvDTE 并直接针对 Roslyn。
推荐阅读
- sql-server - TSQL 中表连接中嵌套案例类型结构的选项有哪些?
- react-native - 无法从“App.js”解析“react-native-wheel-scroll-picker”
- c# - 将所有 'S 替换为 ',除非 s 后面有一个字符?
- c# - DropShadowEffect 方向遵循控件的 RotateTransform
- django - Django,禁止(未设置 CSRF cookie。)如何捕获表单提交并重定向到 GET
- c++ - 如何使用cin从输入的字符串中提取特定的数值?
- c++ - c++初始化模板类构造函数
- php - Laravel ajax 用户注册页面不起作用
- java - 使用流更新列表中的单个对象
- python - 将使用 python-shell 的 Node.js 应用程序部署到 Heroku