Freigeben über


CodeClass.InfoLocation-Eigenschaft

Ruft die Funktionen des Codemodells ab.

Namespace:  EnvDTE
Assembly:  EnvDTE (in EnvDTE.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.

Hinweise

Wenn InfoLocation 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 jedoch nicht bearbeiten. Das heißt, Sie können keine Eigenschaften festlegen oder den Text nach dem Codeelement ä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

 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
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

CodeClass Schnittstelle

EnvDTE-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#)