Visual Studio 集成 (IDE)开发环境 (ide) 使用实现 IProfileManager 接口和注册支持 VSPackage 实现的类。 此实现用于检索 VSPackage 的状态。
由于 IDE 实例化实现 IProfileManager 接口支持 Visual Studio 设置的类,在独立类应实现 IProfileManager 接口。
备注
不要实现该类的 IProfileManager 实现 Package。
实现一组导出
声明实现 Visual Studio 设置的类。
类声明为实现 IProfileManager 并为其提供 GUID。
备注
实现 IProfileManager 接口的类还必须实现 IComponent 接口,可以由派生类来完成从 Component 类。
例如:
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] internal class MyPackageProfileManager : Component, IProfileManager
确保实现设置的类从磁盘检索状态数据。
此步骤通过执行 LoadSettingsFromXml 方法执行。
保持的具体信息和该信息如何从 VSPackage 中获取和排列为每个 VSPackage 不同。
无论将由 VSPackage 保留的信息, IProfileManager 实现的类必须使用所提供的 IVsSettingsReader 接口从设置文件中检索数据。
通常,在下面的示例中, LoadSettingsFromXml 来验证检索的数据和更新 VSPackage 的状态。
Dim mySvc As MyPackageService = TryCast(GetService(GetType(IVSMDMyPackage)), MyPackageService) If mySvc IsNot Nothing Then Dim value As String Dim myState As StateObject = mySvc.MyPackage.packageState reader.ReadSettingString("PbrsShowDesc", value) If value Is Nothing OrElse value = "" Then reader.ReportError("Unable to Help Visibility Setting") Else myState.HelpVisible = Not value.Equals("0") End If reader.ReadSettingString("PbrsAlpha", value) If value Is Nothing OrElse value = "" Then reader.ReportError("Unable to Retrieve Sort Value") Else If Not value.Equals("0") Then myState.SortState = SortState.Alphabetical Else myState.SortState = SortState.Categorized End If End If End If
MyPackageService mySvc = GetService(typeof(IVSMDMyPackage)) as MyPackageService; if (mySvc != null){ string value; StateObject myState = mySvc.MyPackage.packageState; reader.ReadSettingString("PbrsShowDesc", out value); if (value == null || value == ""){ reader.ReportError("Unable to Help Visibility Setting"); }else{ myState.HelpVisible = !value.Equals("0"); } reader.ReadSettingString("PbrsAlpha", out value); if (value == null || value == ""){ reader.ReportError("Unable to Retrieve Sort Value"); }else{ if (!value.Equals("0")){ myState.SortState = SortState.Alphabetical; }else{ myState.SortState = SortState.Categorized; } } }
实现详细信息:
使用 IVsSettingsReader 接口的 ReportError 方法,以交互方式报告错误返回用户通过 IDE:
reader.ReadSettingString("PbrsAlpha", value) If value Is Nothing OrElse value = "" Then reader.ReportError("Unable to Retrieve Sort Value") End If
reader.ReadSettingString("PbrsAlpha", out value); if (value == null || value == ""){ reader.ReportError("Unable to Retrieve Sort Value"); }
在实际检索存储设置之前, LoadSettingsFromXml 方法的实现应使用 ReadFileVersion 方法验证导出存储设置的支持 Visual Studio 的该版本。
在下面的示例中,实现检查设置是否由 Visual Studio 的版本与 m_supportVer的主版本号的生成,如果不是,信号错误。
If pnMajor <> m_supportVer Then reader.ReportError("Unsupported Version") End If
if (pnMajor != m_supportVer){ reader.ReportError("Unsupported Version"); }
Visual Studio 设置文件支持随机数据访问,因此,读取和编写器设置操作的顺序并不重要。 在下面的示例中,编写器操作的顺序。 SaveSettingsToXml 方法的实现了读取操作的相反值在 LoadSettingsFromXml 方法的。
pszSettingName 参数的值提供给 IVsSettingsWriter 接口的方法必须唯一标识每个将设置类别中保存的数据元素。
备注
名称只需要的唯一在实现类的范围内,因为 IDE 使用实现一组和 pszSettingName 的值标识每个已保存的设置类的 GUID。如果多个 IVsSettingsWriter 方法调用与 pszSettingName的值相同,则原始值在设置文件复盖。
确保在 VSPackage 状态和本地存储的或缓存的设置之间的一致性。
此步骤将在 SaveSettingsToStorage 方法的实现时通常执行 (如以下示例中所示)。 此步骤详细信息特定于 VSPackage,也可以包含获取 VSPackage 的状态从自动化的,查询 VSPackage 和设置注册表项。
备注
LoadSettingsFromStorage 方法应检索 SaveSettingsToStorage 方法保存的信息,请 LoadSettingsFromStorage 方法由 IDE 调用它支持其 VSPackage 初始化时。
在下面的示例中,提供设置的类支持实现 SaveSettingsToStorage 方法:
获取对 VSPackage 中已更新的状态信息的访问。
Dim mySvc As MyPackageService = TryCast(GetService(GetType(IVSMDMyPackage)), MyPackageService) Dim package As Package = TryCast(GetService(GetType(Package)), Package) Dim rootKey As RegistryKey = package.UserRegistryRoot
MyPackageService mySvc = GetService(typeof(IVSMDMyPackage)) as MyPackageService; Package package = GetService(typeof(Package)) as Package; RegistryKey rootKey = package.UserRegistryRoot;
使用该信息更新 VSPackage 的注册表设置。
If mySvc.MyPackage.packageState IsNot Nothing Then Using rootKey Using pbrsKey As RegistryKey = rootKey.CreateSubKey(Me.[GetType]().Name) Using pbrsKey DirectCast(mySvc.MyPackage.packageState, IComPropertyBrowser).SaveState(pbrsKey) End Using End Using End Using End If
if (mySvc.MyPackage.packageState != null) { using (rootKey) { using(RegistryKey pbrsKey = rootKey.CreateSubKey(this.GetType().Name)) { using (pbrsKey) { ((IComPropertyBrowser)mySvc.MyPackage.packageState).SaveState(pbrsKey); } } } }
-
备注
操作的工作划分在 LoadSettingsFromXml 和 SaveSettingsToStorage 方法之间的是依赖于实现是某些任意的。例如,实现可以将复盖在 SaveSettingsToXml 方法和所有注册表和状态查询的执行一次空实现 LoadSettingsFromStorage 方法。
注册类为提供的 set 支持对 VSPackage 的实现。
应用 ProvideProfileAttribute 实例构造方式使用类的 Type 实现 IProfileManager 到 VSPackage 中 Package 实现。
<ProvideProfile(GetType(MyPackageProfileManager), "CoreUI", "MyPackage", 1004, 1004, False)> _ <Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")> _ Class MyPackage Inherits Package End Class
[ProvideProfile(typeof(MyPackageProfileManager), "CoreUI", "MyPackage", 1004, 1004, false)] [Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")] class MyPackage: Package
在本例中,特性通知 IDE MyPackageProfileManager 类提供一次一组实现。 MyPackage 类。 自定义在注册表下落点是在 \Software\Microsoft\VisualStudio HKLM \Version\UserSettings\ CoreUI_MyPackage 下,其中 Version 是 Visual Studio的版本,如 8.0。
有关更多信息,请参见 保留的设置 和 ProvideProfileAttribute
示例
下面的示例在类中实现 IProfileManager 。
Imports System
Imports System.Runtime.InteropServices
Imports Microsoft.VisualStudio.Shell
Imports Microsoft.VisualStudio.Shell.Interop
Imports Microsoft.Win32
Imports myPackageNameSpace
Namespace myProfileManagerNameSpace
<Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")> _
Friend Class MyPackageProfileManager
Inherits System.ComponentModel.Component
Implements IProfileManager
Friend Const m_supportVer As Integer = 8
Public Sub SaveSettingsToXml(ByVal writer As IVsSettingsWriter)
Dim mySvc As MyPackageService = TryCast(GetService(GetType(MyPackage)), MyPackageService)
If mySvc IsNot Nothing Then
' Information is stored in a StateObject.
Dim myState As StateObject = mySvc.MyPackage.packageState
writer.WriteSettingString("PbrsAlpha", (If(myState.SortState = SortState.Alphabetical, "1", "0")))
writer.WriteSettingString("PbrsShowDesc", (If(myState.HelpVisible, "1", "0")))
End If
End Sub
Public Sub LoadSettingsFromXml(ByVal reader As IVsSettingsReader)
Dim pnMajor As Integer, pnMinor As Integer, pnBuild As Integer
' First check if we are getting data from the correct major version.
reader.ReadVersion(pnMajor, pnMinor, pnBuild)
If pnMajor <> m_supportVer Then
reader.ReportError("Unsupported Version")
Else
Dim mySvc As MyPackageService = TryCast(GetService(GetType(IVSMDMyPackage)), MyPackageService)
If mySvc IsNot Nothing Then
Dim value As String
Dim myState As StateObject = mySvc.MyPackage.packageState
reader.ReadSettingString("PbrsShowDesc", value)
' Not all values must be present.
If value Is Nothing OrElse value = "" Then
reader.ReportError("Unable to Help Visibility Setting")
Else
myState.HelpVisible = Not value.Equals("0")
End If
reader.ReadSettingString("PbrsAlpha", value)
' Not all values must be present.
If value Is Nothing OrElse value = "" Then
reader.ReportError("Unable to Retrieve Sort Value")
Else
If Not value.Equals("0") Then
myState.SortState = SortState.Alphabetical
Else
myState.SortState = SortState.Categorized
End If
End If
End If
End If
End Sub
Public Sub SaveSettingsToStorage()
Dim mySvc As MyPackageService = TryCast(GetService(GetType(IVSMDMyPackage)), MyPackageService)
Dim package As Package = TryCast(GetService(GetType(Package)), Package)
Dim rootKey As RegistryKey = package.UserRegistryRoot
If mySvc.MyPackage.packageState IsNot Nothing Then
Using rootKey
Using pbrsKey As RegistryKey = rootKey.CreateSubKey(Me.[GetType]().Name)
Using pbrsKey
DirectCast(mySvc.MyPackage.packageState, IComPropertyBrowser).SaveState(pbrsKey)
End Using
End Using
End Using
End If
End Sub
Public Sub LoadSettingsFromStorage()
Dim mySvc As MyPackageService = TryCast(GetService(GetType(IVSMDMyPackage)), MyPackageService)
Dim package As Package = TryCast(GetService(GetType(Package)), Package)
Dim rootKey As RegistryKey = package.UserRegistryRoot
Using rootKey
Dim pbrsKey As RegistryKey = rootKey.OpenSubKey(Me.[GetType]().Name)
If pbrsKey IsNot Nothing Then
Using pbrsKey
If mySvc.MyPackage.MakeCurrentSettingTheDefault() Then
DirectCast(mySvc.MyPackage.packageState, IComPropertyBrowser).SaveState(pbrsKey)
Else
DirectCast(mySvc.MyPackage.packageState, IComPropertyBrowser).LoadState(pbrsKey)
End If
End Using
End If
End Using
End Sub
End Class
End Namespace
namespace myProfileManagerNameSpace {
using System;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.Win32;
using myPackageNameSpace;
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
internal class MyPackageProfileManager : System.ComponentModel.Component , IProfileManager {
internal const int m_supportVer = 8;
public void SaveSettingsToXml(IVsSettingsWriter writer) {
MyPackageService mySvc = GetService(typeof(MyPackage)) as MyPackageService;
if (mySvc != null) {
// Information is stored in a StateObject.
StateObject myState = mySvc.MyPackage.packageState;
writer.WriteSettingString(
"PbrsAlpha",
(myState.SortState == SortState.Alphabetical ? "1" : "0"));
writer.WriteSettingString(
"PbrsShowDesc",
(myState.HelpVisible ? "1" : "0"));
}
}
public void LoadSettingsFromXml(IVsSettingsReader reader)
{
int pnMajor, pnMinor, pnBuild;
// First check if we are getting data from the correct major version.
reader.ReadVersion(pnMajor, pnMinor, pnBuild);
if (pnMajor != m_supportVer){
reader.ReportError("Unsupported Version");
}else{
MyPackageService mySvc = GetService(typeof(IVSMDMyPackage)) as MyPackageService;
if (mySvc != null){
string value;
StateObject myState = mySvc.MyPackage.packageState;
reader.ReadSettingString("PbrsShowDesc", out value);
// Not all values must be present.
if (value == null || value == ""){
reader.ReportError("Unable to Help Visibility Setting");
}else{
myState.HelpVisible = !value.Equals("0");
}
reader.ReadSettingString("PbrsAlpha", out value);
// Not all values must be present.
if (value == null || value == ""){
reader.ReportError("Unable to Retrieve Sort Value");
}else{
if (!value.Equals("0")){
myState.SortState = SortState.Alphabetical;
}else{
myState.SortState = SortState.Categorized;
}
}
}
}
}
public void SaveSettingsToStorage() {
MyPackageService mySvc = GetService(typeof(IVSMDMyPackage)) as MyPackageService;
Package package = GetService(typeof(Package)) as Package;
RegistryKey rootKey = package.UserRegistryRoot;
if (mySvc.MyPackage.packageState != null) {
using (rootKey) {
using(RegistryKey pbrsKey = rootKey.CreateSubKey(this.GetType().Name)) {
using (pbrsKey) {
((IComPropertyBrowser)mySvc.MyPackage.packageState).SaveState(pbrsKey);
}
}
}
}
}
public void LoadSettingsFromStorage() {
MyPackageService mySvc = GetService(typeof(IVSMDMyPackage)) as MyPackageService;
Package package = GetService(typeof(Package)) as Package;
RegistryKey rootKey = package.UserRegistryRoot;
using (rootKey) {
RegistryKey pbrsKey = rootKey.OpenSubKey(this.GetType().Name);
if (pbrsKey != null) {
using (pbrsKey) {
if (mySvc.MyPackage.MakeCurrentSettingTheDefault()){
((IComPropertyBrowser)mySvc.MyPackage.packageState).SaveState(pbrsKey);
}else{
((IComPropertyBrowser)mySvc.MyPackage.packageState).LoadState(pbrsKey);
}
}
}
}
}
}
}