Поделиться через


CodeAttribute2.InfoLocation - свойство

Возвращает модель кода.

Пространство имен:  EnvDTE80
Сборка:  EnvDTE80 (в EnvDTE80.dll)

Синтаксис

'Декларация
ReadOnly Property InfoLocation As vsCMInfoLocation
    Get
vsCMInfoLocation InfoLocation { get; }
property vsCMInfoLocation InfoLocation {
    vsCMInfoLocation get ();
}
abstract InfoLocation : vsCMInfoLocation
function get InfoLocation () : vsCMInfoLocation

Значение свойства

Тип: EnvDTE.vsCMInfoLocation
Значение константы vsCMInfoLocation.

Реализации

CodeAttribute.InfoLocation

Заметки

Если свойство InfoLocation возвращает значение vsCMInfoLocationProject, то можно установить свойства, получив StartPoint, получив EndPoint и т.д. При переходе от одного объекта модели кода (A) к другому (B) — например, от функции к ее типу или от класса к базовому классу — объект B может иметь тип vsCMInfoLocationExternal, если его определение находится в другом проекте. Размещение зависит от реализации модели кода, от того, реализованы ли проекты объектов A и B на одном языке, и т. д.

Если свойство InfoLocation возвращает vsCMInfoLocationExternal, то сведения можно извлечь только из метаданных, из замороженных ресурсов или путем просмотра DLL. Можно получить StartPoint и EditPoint, но нельзя редактировать документ. Иными словами, нельзя задавать свойства или изменять текст, находящийся за элементом кода.

Если InfoLocation возвращает vsCMInfoLocationNone, то доступен только объект модели кода, имеющий имя. Кроме того, в зависимости от контекста исходного кода можно в некоторых случаях понять, должно ли имя быть именем класса или интерфейса. В данной ситуации, поскольку модель кода не может разрешить данное имя, вернув какие бы то ни было полезные сведения, объект почти полностью бесполезен.

Примечание

Значения элементов модели кода, таких как классы, структуры, функции, атрибуты, делегаты и другие, после внесения некоторых изменений могут оказаться недетерминированными, другими словами, нельзя рассчитывать, что их значения будут всегда оставаться одинаковыми.Дополнительные сведения см. в разделе "Значения элементов модели кода могут изменяться" раздела Практическое руководство. Поиск кода при помощи модели кода (Visual Basic).

Примеры

В следующем примере создается новое пространство имен и атрибут в текущем классе и перечисляются некоторые свойства атрибута.

public void CreateClassAndAttrib(DTE2 applicationObject)
{
    // Before running, load or create a project.
    FileCodeModel2 fcm2 = GetFileCodeModel(applicationObject);
    CodeAttribute2 cmAttribute;
    CodeClass2 cmClass;
    String msg = null;

    if (fcm2 != null)
    {
        CodeNamespace cmNamespace;
        // Try to create a new namespace.
        try
        {
            cmNamespace = fcm2.AddNamespace("CMNamespace", -1);
            // If successful, create the other code elements.
            if (cmNamespace != null)
            {
                cmClass = (CodeClass2)cmNamespace.AddClass("ANewClass", 
                -1, null, null, vsCMAccess.vsCMAccessPrivate);
                cmAttribute = (CodeAttribute2)cmClass.AddAttribute
                ("NewAttribute", "AttributeValue", -1);
                msg += "InfoLocation: " + cmAttribute.InfoLocation + 
                Environment.NewLine;
                msg += "IsCodeType?: " + cmAttribute.IsCodeType + 
                Environment.NewLine;
                msg += "Kind: " + cmAttribute.Kind + 
                Environment.NewLine;
                MessageBox.Show(msg);                       
            }
            else
            {
                MessageBox.Show("Cannot continue - no filecodemodel 
                available.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("ERROR: " + ex);
        }
    }
}

public FileCodeModel2 GetFileCodeModel(DTE2 applicationObject)
{
    // Returns the FileCodeModel object of the active 
    // window.
    TextWindow txtWin = 
    (TextWindow)applicationObject.ActiveWindow.Object;
    FileCodeModel2 fcm2;
    if (txtWin != null)
    {
        try
        {
             fcm2 = (FileCodeModel2)txtWin.Parent.
             ProjectItem.FileCodeModel;
             return fcm2;
        }
        catch (Exception ex)
        {
             MessageBox.Show("ERROR: " + ex);
             return null;
        }
    }
    else
        return null;
}

Безопасность платформы .NET Framework

См. также

Ссылки

CodeAttribute2 Интерфейс

InfoLocation - перегрузка

EnvDTE80 - пространство имен

Другие ресурсы

Практическое руководство. Компиляция и выполнение примеров кода модели объектов автоматизации

Практическое руководство. Поиск кода при помощи модели кода (Visual Basic)

Практическое руководство. Поиск кода при помощи модели кода (Visual C#)