프로젝트 및 솔루션에 정보 유지
업데이트: 2007년 11월
프로젝트를 닫으면 변수 값과 같은 사용자 데이터가 삭제됩니다. 솔루션이나 프로젝트를 저장하는 경우에도 마찬가지입니다. 그러나 Visual Studio 자동화 모델에서는 IDE(통합 개발 환경)의 세션 사이에 이러한 사용자 데이터를 저장하거나 유지하는 방법을 제공합니다. 이러한 작업은 Globals 및 Globals 속성을 통해 Globals 개체를 사용하여 수행됩니다. Globals는 솔루션 변수를 유지하고, Globals는 프로젝트 변수를 유지합니다. 각 속성은 모두 Globals 개체를 반환합니다. 이 개체의 멤버를 사용하면 데이터를 저장, 검색, 열거하고 필요에 따라 유지할 수 있습니다. 이렇게 하면 다음에 솔루션 또는 프로젝트를 열 때 해당 값이 복원됩니다.
이 방법은 명령을 통해 영구 기본값을 제공하거나 명령이 특정 횟수만큼 호출된 후 달라진 동작을 나타내도록 하려는 경우에 유용합니다. 또한 추가 기능에서는 이 기능을 사용하여 솔루션 파일(.sln) 간에 데이터를 유지하고 검색할 수 있습니다.
전역 개체 동작 정보
Globals 개체가 IDE와 연결되어 있는 경우에는 값이 두 위치 중 한 곳에 유지됩니다. Windows NT 4.0, Windows 2000 Professional 및 Windows Server 2003에서는 이 값이 C:\winnt\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat에 저장됩니다. Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition에서는 사용자 로그인을 위한 시스템이 설정되어 있는 경우 이 값이 C:\Windows\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat에 저장되고, 그렇지 않은 경우 <username> 요소가 없습니다. IDE를 닫거나 모두 저장 작업을 수행할 때마다 IDE에 해당 전역 값이 유지됩니다.
Globals 개체가 Solution2 개체와 연결되어 있는 경우에는 값이 .sln 파일에 유지됩니다. 이러한 값은 솔루션 파일이 저장될 때 유지됩니다.
Globals 개체가 Project 개체와 연결되어 있는 경우에는 값이 프로젝트 파일(.dsp, .vbp 등)에 유지됩니다. 해당 값은 프로젝트가 저장될 때마다 유지됩니다.
저장되는 값은 SAFEARRAY, 개체 또는 구조적 저장소가 아닌 문자열로 유지할 수 있어야 합니다. 해당 변수를 문자열로 변환할 수 없는 경우에는 변수가 유지되지 않는 이유를 설명하는 영어 문자열 값이 유지됩니다.
변수가 유지될 때마다 변수 및 변수 값의 새 레코드가 저장됩니다.
전역 값 유지
다음 매크로 예제에서는 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.");
}