【问题标题】:Access List of Available Types from a Visual Studio Add In?从 Visual Studio 加载项访问可用类型的列表?
【发布时间】:2011-11-15 18:49:11
【问题描述】:

有没有办法在 Visual Studio 的解决方案中访问已加载项目中可用的类型(类、接口等及其元数据)?

更具体地说,我正在尝试开发一个简单的 Visual Studio 插件来提供“转到实现”功能:

https://bitbucket.org/jbubriski/go-to-implementation/

我意识到这存在于其他生产力插件/扩展中,但我正在制作一个简单的框架,因此我不必处理其他添加的“功能”导致的减速、挂起和崩溃.

如果您查看源代码,我可以使用非常基本且脆弱的方法获取当前选定的文本。鉴于选择,我基本上假设它是一个接口,去掉“I”,然后在解决方案范围内搜索 ProjectItems,其中文件名以 "\TypeName.cs" 结尾。

是否有一些 Visual Studio 为我可以访问的智能感知维护的内部类型列表?很高兴地说:

var vsType = VS.GetLocalType("TypeName")

然后访问

vsType.FileName

更进一步

foreach(var vsType in VS.GetlocalTypes())
{
    if(vsType.Implements.Contains("IInterfaceName"))
    {
        // Found something that implements my interface!
    }
}

有什么想法吗?

【问题讨论】:

    标签: c# visual-studio visual-studio-2010 add-in visual-studio-addins


    【解决方案1】:

    不确定原生 VS 插件的实现,但如果您使用的是 DevExpress.CodeRush,goto 定义功能应该基于源文件中的当前位置,并执行以下操作来检索对声明类型的引用: ((TypeReferenceExpression)CodeRush.Source.Active).GetDeclaringType()

    附:我知道我没有回答你的问题,但希望这会给你一个寻找解决方案的方向

    【讨论】:

    • 感谢您的回复。不幸的是,这对我没有帮助,因为我没有他们的源代码:P
    • 仅供参考,我仔细检查了一下,看起来 TypeReferenceExpression 是一个 CodeRush 类。
    【解决方案2】:

    【讨论】:

    • 我最初尝试过这个,但我认为它不会起作用,因为我正在尝试引用尚未实际编译的类型和接口!更不用说他们没有添加到 VS ass 引用的事实。虽然,我可能完全错过了一些东西。如果有办法,我将不胜感激。谢谢!
    • 所以我猜智能感知完全是内部的?
    • 我不明白你的意思。 Intellisense 显示现有类型的类型成员。您可以在本地编译之前为本地变量获取 Intellisense,但该变量的类型必须已经存在。
    • 对,类型存在于项目、解决方案或项目引用的已编译.NET 程序集中。 Visual Studio 必须维护可用于 Intellisense 的类型列表。我可以在我的插件中使用该类型列表吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多