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


Сохранение сведений в проектах и решениях

При закрытии проекта данные пользователя, например, значения переменных, удаляются, даже если решение или проект сохраняется.Однако модель автоматизации Visual Studio предлагает способ сохранения подобных пользовательских данных в промежутках между сеансами работы в интегрированной среде разработки (IDE).Это достигается путем использования объекта Globals с помощью свойств Globals и Globals.Globals сохраняет переменные решения, а Globals сохраняет переменные проекта.Каждое свойство возвращает объект Globals, члены которого позволяют хранить, извлекать, перечислять и, по необходимости, сохранять данные.Если сохранить данные, то при следующем открытии решения или проекта значения будут восстановлены.

Например, это может быть удобно, когда требуется, чтобы команда предлагала сохраненное значение по умолчанию или изменяла свое поведение после определенного количества вызовов.Надстройки также могут использовать эту возможность для сохранения и извлечения данных из файлов решения (SLN).

Cведения о поведении глобального объекта

Если объект Globals связан с интегрированной средой, его значение сохраняется в одном из двух возможных мест.В Windows NT 4.0, Windows 2000 Professional и Windows Server 2003 значения хранятся в файле C:\winnt\Profiles\<имя_пользователя>\Application Data\Microsoft\Visual Studio\extglobal.dat.В Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, если компьютер настроен так, что пользователи должны входить в систему, значения хранятся в файле C:\Windows\Profiles\<имя_пользователя>\Application Data\Microsoft\Visual Studio\extglobal.dat.В противном случае элемент <имя_пользователя> отсутствует.Каждый раз при закрытии интегрированной среды разработки или при выполнении операции "Сохранить все" интегрированная среда разработки сохраняет глобальные значения.

Если объект Globals связан с объектом Solution2, значение сохраняется в SNL-файле.Эти значения сохраняются при сохранении файла решения.

Если объект Globals связан с объектом Project, значение сохраняется в файле проекта (DSP, VBP и т.д.).Эти значения сохраняются при каждом сохранении проекта.

Сохраняемые значения должны иметь возможность сохранения в качестве строки, т. е. не должны быть SAFEARRAY, объектами или структурированными хранилищами.Если переменная не может быть преобразована в строку, сохраняется значение строки на английском языке с объяснением, почему переменная не может быть сохранена.

При каждом сохранении переменных происходит сохранение новой записи переменных и их значений.

96t389k3.collapse_all(ru-ru,VS.110).gifСохранение глобальных значений

В следующем примере макроса показано, как использовать объект Globals и его члены для сохранения значения переменной после закрытия решения и как получить доступ к сохраненному значению при повторном открытии решения.В примере подсчитывается и выводится число загрузок надстройки.

Sub OnAddinLoaded(ByVal dte As DTE)
    ' Count the number of times an add-in is loaded
    ' and store the value in the solution.
    Dim globals As Globals
    globals = dte.Solution.Globals
    If globals.VariableExists("AddinLoadCounter") Then
        ' The counter has already been set, so increment it.
        Dim int32 As System.Int32
        int32 = System.Int32.Parse(CStr(globals("AddinLoadCounter")))
        int32 += 1
        globals("AddinLoadCounter") = int32.ToString()
    Else
        ' Counter has never been set, so create and initialize it.
        globals("AddinLoadCounter") = 1.ToString()
        globals.VariablePersists("AddinLoadCounter") = True
    End If
    MsgBox("This add-in has been loaded: " & _
    globals.VariableValue("AddinLoadCounter") & " times.")
End Sub
void OnAddinLoaded(_DTE applicationObject)
{
    // Count the number of times an add-in is loaded
    // and store the value in the solution.
    Globals globals;
    globals = applicationObject.Solution.Globals;
    if(globals.get_VariableExists("AddinLoadCounter"))
    {
        // The counter has already been set, so increment it.
        System.Int32 int32;
        int32 = System.Int32.Parse((string)
        globals["AddinLoadCounter"]);
        int32++;
        globals["AddinLoadCounter"] = int32.ToString();
    }
    else
    {
        // Counter has never been set, so create and initialize it.
        globals["AddinLoadCounter"] = 1.ToString();
        globals.set_VariablePersists("AddinLoadCounter", true);
    }
    System.Windows.Forms.MessageBox.Show("This add-in has been loaded: 
    " + globals.VariableValue["AddinLoadCounter"] + " times.");
}

См. также

Задачи

Практическое руководство. Добавление и обработка команд

Практическое руководство. Создание надстройки

Пошаговое руководство. Создание мастера

Основные понятия

Диаграмма модели объектов автоматизации

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

Создание окон среды и управление ими

Создание надстроек и мастеров

Справочник по автоматизации и возможностям расширения среды