VS 2010 - 复制类/接口的完整类型名称的简便方法?

时间:2011-02-11 17:16:08

标签: visual-studio-2010 ioc-container

有没有办法复制类/接口/等的完整类型名称。在Visual Studio中的剪贴板?特别是,我需要它们用于Castle Windsor配置,并且很想知道如何毫不费力地做到这一点。 (示例:在代码编辑器中突出显示IInterface,最后在剪贴板上显示My.Full.Namespace.Is.Here.IInterface。)

VS将完整的类型名称放在左上角的只读组合框中(这对复制来说完全没用);有人知道吗?

(我有ReSharper,如果有办法可以使用它。)

1 个答案:

答案 0 :(得分:2)

这是一个应该让你前进的宏。错误处理很糟糕,但我无法鼓起勇气,我绝对讨厌VB:)

另请注意,它只捕获类类型名称或接口类型名称,您可以在光标位于类或接口定义中的任何位置运行它。它将捕获类/接口范围的名称。

它在一个线程中运行Clipboard调用,因为它是一个Windows Forms组件,它们需要在一个STAThread中运行。

将完整的typename复制到剪贴板。

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module SkurmedelMacros

    Public Sub SetClipboard(ByVal x As Object)
        System.Windows.Forms.Clipboard.SetText(CStr(x), System.Windows.Forms.TextDataFormat.Text)
    End Sub

    Public Sub GetTypeName()
        Dim solution As Solution = DTE.Solution
        Dim activePoint As TextPoint = CType(DTE.ActiveDocument.Selection, TextSelection).ActivePoint
        Dim codeElem As CodeElement = _
            DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElementFromPoint(activePoint, vsCMElement.vsCMElementClass)
        If codeElem Is Nothing Then
            codeElem = DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElementFromPoint(activePoint, vsCMElement.vsCMElementInterface)
        End If

        Dim ClipBoardThread As System.Threading.Thread = New System.Threading.Thread(AddressOf SetClipboard)
        With ClipBoardThread
            .ApartmentState = System.Threading.ApartmentState.STA
            .IsBackground = True
            .Start(codeElem.FullName)
            .Join()
        End With
        ClipBoardThread = Nothing

    End Sub


End Module