Gewusst wie: Import-Einstellungen mithilfe von verwaltetem Paketframeworks
Die Visual Studio integrierte Entwicklungsumgebung (IDE) IProfileManager die Klassen, die die Schnittstelle implementieren und registriert sein, um eine VSPackage-Implementierung zu unterstützen. Diese Implementierung wird verwendet, um den Zustand von VSPackages abzurufen.
Da die IDE die Klasse instanziiert, die die IProfileManager-Schnittstelle implementiert, um die Visual Studio Einstellungen zu unterstützen, sollte die IProfileManager-Schnittstelle in einer unabhängigen Klasse implementiert werden.
Hinweis
Implementieren Sie nicht IProfileManager für die Klasse, die Packageimplementiert.
So implementieren Einstellungs-Export
Deklarieren Sie die Klasse, die die Visual Studio Einstellungen implementiert.
Deklarieren Sie eine Klasse als Implementieren von IProfileManager und stellen Sie sie mit GUID.
Hinweis
Die Klassen, die die IProfileManager-Schnittstelle implementieren, müssen auch die IComponent-Schnittstelle implementieren, die ausgeführt werden können, indem die Klasse von der Component-Klasse abgeleitet ist.
Beispiele:
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] internal class MyPackageProfileManager : Component, IProfileManager
Stellen Sie sicher, dass die Klasse, die die Einstellungen implementiert, Zustandsdaten aus dem Datenträger abruft.
Dieser Schritt wird ausgeführt, indem die LoadSettingsFromXml-Methode implementiert.
Die genauen Informationen, die beibehalten werden sollen und wie diese Informationen von einem VSPackage abgerufen und gemarshallt werden, unterscheiden sich für jeden VSPackage.
Unabhängig von der Informationen, die von einem VSPackage beibehalten werden soll, muss die Klasse, die IProfileManager implementiert wird, die angegebene IVsSettingsReader-Schnittstelle verwenden, um Daten aus der Einstellungsdatei abzurufen.
Normalerweise, wie im nachfolgenden Beispiel wird überprüft LoadSettingsFromXml auch die abgerufenen Daten und aktualisiert den Zustand VSPackages.
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; } } }
Implementierungsdetails:
Meldet Fehler wieder dem Benutzer interaktiv von der IDE mithilfe der ReportError-Methode der IVsSettingsReader-Schnittstelle:
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"); }
Vor tatsächlich gespeicherten Einstellungen abrufen, sollte eine Implementierung der LoadSettingsFromXml-Methode die ReadFileVersion-Methode verwenden, um diese Version von Visual Studio zu überprüfen, die die gespeicherten Einstellungen unterstützt wird, exportiert.
Bei der Implementierung des Beispiels unten, überprüft, wenn Einstellungen von einer Version von Visual Studio mit der Hauptversionsnummer von m_supportVerund erzeugt einen Fehler, wenn nicht signalisiert.
If pnMajor <> m_supportVer Then reader.ReportError("Unsupported Version") End If
if (pnMajor != m_supportVer){ reader.ReportError("Unsupported Version"); }
Die Visual Studio Einstellungsdatei zufälligen Datenzugriff unterstützt. Daher ist die Reihenfolge der Vorgänge einstellungs Lese- und Writer nicht wichtig. Im nachstehenden Beispiel ist die Reihenfolge der Vorgänge Writer in der Implementierung der SaveSettingsToXml-Methode Umkehrung der Lesevorgänge in der LoadSettingsFromXml-Methode.
Der Wert des Arguments pszSettingName , das auf eine Methode der IVsSettingsWriter-Schnittstelle angegeben wird, muss jedes des Datenelements eindeutig bezeichnen, das in eine Einstellungskategorie gespeichert wird.
Hinweis
Namen dürfen nur im Kontext der implementierenden Klasse eindeutig sein, da die IDE die GUID der Klasse veranschaulicht, die die Einstellungen und den Wert pszSettingName implementiert, um jede gespeicherte Einstellung zu identifizieren.Wenn mehr als eine IVsSettingsWriter-Methode mit demselben Wert pszSettingNameaufgerufen wird, wird der ursprüngliche Wert in der Einstellungsdatei überschrieben.
Stellen Sie die Kohärenz zwischen VSPackage-Zustand und lokal gespeicherten oder zwischengespeicherten Einstellungen sicher.
Dieser Schritt ist normalerweise bei der Implementierung der SaveSettingsToStorage-Methode ausgeführt (wie im nachfolgenden Beispiel gezeigt wird). Die Details dieses Schritts und VSPackages umfassen bestimmt sind, kann der Zustand der Automatisierung von VSPackages zu erhalten, VSPackages abzufragen und Registrierungsschlüssel anzugeben.
Hinweis
Die LoadSettingsFromStorage-Methode sollte die Informationen abrufen, die durch die SaveSettingsToStorage-Methode gespeichert werden, wenn die LoadSettingsFromStorage-Methode von der IDE während ihrer Initialisierung VSPackages aufgerufen wird, die sie unterstützen.
Im folgenden Beispiel implementiert die Klasse, die die Unterstützung von Einstellungen unterstützt, die SaveSettingsToStorage-Methode:
Rufen Sie Zugriff auf die VSPackages aktualisierten Zustandsinformationen.
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;
Verwenden Sie diese Informationen, um die VSPackages Registrierungseinstellungen zu aktualisieren.
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); } } } }
-
Hinweis
Die Arbeitsteilung zwischen dem LoadSettingsFromXml und Methoden ist SaveSettingsToStorage hängt von der Implementierung und stellt ein wenig beliebigen.Zum Beispiel kann die Implementierung mit einer leeren Implementierung der Methode LoadSettingsFromStorage Registrierungs- und alle Zustände und Abfragen umgeschrieben werden, die in der SaveSettingsToXml-Methode ausgeführt wurden.
Registrieren Sie die Klasse implementiert ist, die die Einstellungen, z. B. Unterstützung VSPackage gewährend.
Wenden Sie eine Instanz von ProvideProfileAttribute erstellt hat, indem Sie Type der Klasse verwenden, die zur IProfileManager VSPackages Package Implementierung implementiert.
<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
In diesem Fall teilt das Attribut über die IDE, dass die MyPackageProfileManager-Klasse eine Implementierung der Einstellungen zur MyPackage-Klasse bereitstellt. Der benutzerdefinierte Einstellungs-Punkt in der Registrierung wird unter HKLM \ Software \ Microsoft \ VisualStudio \ <Version> \ UserSettings \ CoreUI_MyPackage, wo <Version> die Version von Visual Studioist, z. B. 8.0 erstellt.
Weitere Informationen finden Sie unter Beibehalten von Einstellungen und unter ProvideProfileAttribute.
Beispiel
Im folgenden Beispiel implementiert IProfileManager für eine Klasse.
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);
}
}
}
}
}
}
}
Siehe auch
Aufgaben
Gewusst wie: und exportieren mithilfe von verwaltetem Paketframeworks