在项目和解决方案中保持信息

当关闭项目时,即使保存了解决方案或项目,通常也会丢弃用户数据(如变量值)。不过,Visual Studio 自动化模型提供了一种在集成开发环境 (IDE) 会话之间存储或保持此类用户数据的方法。这是通过利用 GlobalsGlobals 属性使用 Globals 对象来完成的。Globals 保存解决方案变量,而 Globals 保存项目变量。每个属性都返回 Globals 对象,该对象的成员使您可以存储、检索、枚举和可选择保持数据。进行这些操作后,下一次打开解决方案或项目时,将还原这些值。

例如,这有助于允许命令提供持久性默认值,或有助于允许此命令在被调用了数次后更改其行为。外接程序还可以使用此功能将数据保持到 Solution (.sln) 文件中,并从 Solution (.sln) 文件中检索数据。

全局对象行为详细信息

如果 Globals 对象与 IDE 关联,则值保持在两个位置中的一个。对于 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 中。否则,将没有 <用户名> 元素。每次关闭 IDE 或发生“全部保存”操作时,IDE 都将保持全局值。

如果 Globals 对象与 Solution2 对象关联,则值保持在 .sln 文件中。保存解决方案文件时,会保持这些值。

如果 Globals 对象与 Project 对象关联,则值保持在项目文件(.dsp、.vbp 等)中。任何时候保存项目时,都会保持这些值。

要存储的值必须为可以保持的字符串,即不是 SAFEARRAY、对象或结构化存储。如果无法将变量转换为字符串,则将保持英语字符串值以用于解释没有保持变量的原因。

每当保持变量时,都将保存变量的新记录和变量的值。

96t389k3.collapse_all(zh-cn,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.");
}

请参见

任务

如何:添加和处理命令

如何:创建外接程序

演练:创建向导

概念

自动化对象模型图表

其他资源

创建和控制环境窗口

创建外接程序和向导

自动化与扩展性参考