Freigeben über


CodeClass2.InfoLocation-Eigenschaft

Ruft die Funktionen des Codemodells ab.

Namespace:  EnvDTE80
Assembly:  EnvDTE80 (in EnvDTE80.dll)

Syntax

'Declaration
ReadOnly Property InfoLocation As vsCMInfoLocation
    Get
vsCMInfoLocation InfoLocation { get; }
property vsCMInfoLocation InfoLocation {
    vsCMInfoLocation get ();
}
abstract InfoLocation : vsCMInfoLocation
function get InfoLocation () : vsCMInfoLocation

Eigenschaftswert

Typ: EnvDTE.vsCMInfoLocation
Ein konstanter vsCMInfoLocation-Wert.

Implementiert

CodeClass.InfoLocation

Hinweise

Wenn die InfoLocation-Eigenschaft den Wert vsCMInfoLocationProject zurückgibt, können Sie Eigenschaften festlegen, StartPoint und EndPoint abrufen usw. Wenn Sie von einem Codemodellobjekt (A) zu einem anderen (B) wechseln, z. B. von einer Funktion zu deren Typ oder von einer Klasse zu deren Basisklasse, kann B vom Typ vsCMInfoLocationExternal sein, wenn sich die zugehörige Definition in einem anderen Projekt befindet. Die Disposition hängt von der Implementierung des Codemodells ab, sowie davon, ob das Projekt von Objekt B in derselben Sprache implementiert ist wie das von Objekt A usw.

Wenn InfoLocation den Wert vsCMInfoLocationExternal zurückgibt, sind Informationen nur über Metadaten, durch Prüfen einer DLL oder aus eingefrorenen Quellen verfügbar. Möglicherweise können Sie StartPoint und EditPoint abrufen. Das Dokument kann jedoch nicht bearbeitet werden, d. h., Sie können keine Eigenschaften festlegen und den Text nach dem Codeelement nicht ändern.

Wenn InfoLocation den Wert vsCMInfoLocationNone zurückgibt, ist lediglich ein Codemodellobjekt mit einem Namen verfügbar. Je nach Kontext des Quellcodes können Sie in einigen Fällen erkennen, ob es sich bei dem Namen um eine Klasse oder eine Schnittstelle handelt. In diesem Fall ist das Objekt jedoch anderweitig nicht verwendbar, da das Codemodell den Namen nicht in nützliche Informationen auflösen konnte.

Tipp

Die Werte von Codemodellelementen wie Klassen, Strukturen, Funktionen, Attributen, Delegaten usw. können nach bestimmten Bearbeitungsvorgängen nicht deterministisch sein, d. h., dass nicht mehr davon ausgegangen werden kann, dass ihre Werte immer unverändert bleiben. Weitere Informationen finden Sie im Abschnitt zum Änderungsverhalten von Codemodellelementwerten unter Ermitteln von Code über das Codemodell (Visual Basic).

Beispiele

[Visual Basic]

Sub InfoLocationExample(ByVal dte As DTE2)
    ' Before running this example, open a code document from a project
    ' and place the insertion point inside a class definition.
    Try
        ' Retrieve the CodeClass at the insertion point.
        Dim sel As TextSelection = _
            CType(dte.ActiveDocument.Selection, TextSelection)
        Dim cls As CodeClass = _
            CType(sel.ActivePoint.CodeElement( _
            vsCMElement.vsCMElementClass), CodeClass)

        ' Display the class's location.
        MsgBox(cls.Name & "'s InfoLocation value is " & _
            cls.InfoLocation.ToString())

        Dim cm As CodeModel = _
            cls.ProjectItem.ContainingProject.CodeModel
        Dim name As String = ConvertFullName(cm, "System.Object")
        Dim obj As CodeType = cm.CodeTypeFromFullName(name)

        ' Display System.Object's location.
        MsgBox(obj.FullName & "'s InfoLocation value is " & _
            obj.InfoLocation.ToString())
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Function ConvertFullName(ByVal cm As CodeModel, _
    ByVal fullName As String) As String
    ' Convert a .NET type name into a C++ type name.
    If (cm.Language = CodeModelLanguageConstants.vsCMLanguageVC) Or _
        (cm.Language = CodeModelLanguageConstants.vsCMLanguageMC) Then
        Return fullName.Replace(".", "::")
    Else
        Return fullName
    End If
End Function

[C#]

public void InfoLocationExample(DTE2 dte)
{
    // Before running this example, open a code document from a project
    // and place the insertion point inside a class definition.
    try
    {
        // Retrieve the CodeClass at the insertion point.
        TextSelection sel = 
            (TextSelection)dte.ActiveDocument.Selection;
        CodeClass cls = 
            (CodeClass)sel.ActivePoint.get_CodeElement(
            vsCMElement.vsCMElementClass);

        // Display the class's location.
        MessageBox.Show(cls.Name + "'s InfoLocation value is " + 
            cls.InfoLocation.ToString());

        CodeModel cm = cls.ProjectItem.ContainingProject.CodeModel;
        string name = ConvertFullName(cm, "System.Object");
        CodeType obj = cm.CodeTypeFromFullName(name);

        // Display System.Object's location.
        MessageBox.Show(obj.FullName + "'s InfoLocation value is " + 
            obj.InfoLocation.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

string ConvertFullName(CodeModel cm, string fullName)
{
    // Convert a .NET type name into a C++ type name.
    if ((cm.Language == CodeModelLanguageConstants.vsCMLanguageVC) || 
        (cm.Language == CodeModelLanguageConstants.vsCMLanguageMC))
        return fullName.Replace(".", "::");
    else
        return fullName;
}

.NET Framework-Sicherheit

Siehe auch

Referenz

CodeClass2 Schnittstelle

InfoLocation-Überladung

EnvDTE80-Namespace

Weitere Ressourcen

Gewusst wie: Kompilieren und Ausführen der Codebeispiele für das Automatisierungsobjektmodell

Ermitteln von Code über das Codemodell (Visual Basic)

Ermitteln von Code über das Codemodell (Visual C#)