Gewusst wie: und exportieren mithilfe von verwaltetem Paketframeworks
Die Visual Studio integrierte Entwicklungsumgebung (IDE) IProfileManager-Klassen, die die Schnittstelle implementieren und - Klassen, die als Unterstützung einer angegebenen VSPackage-Implementierung, um den Zustand von VSPackages zu speichern registriert werden.
Da die IDE die Klasse instanziiert, die die IProfileManager-Schnittstelle implementiert, um die Einstellungen zu unterstützen, sollte IProfileManager in einer unabhängigen Klasse implementiert werden.
Hinweis
Implementieren Sie nicht IProfileManager für die Klasse, die Packageimplementiert.
So implementieren Sie den Export von Einstellungen
Deklarieren Sie die Klasse, die die Visual Studio Einstellungen implementiert.
Deklarieren Sie eine Klasse als Implementieren der IProfileManager-Schnittstelle und stellen Sie sie mit einer GUID.
Hinweis
Klassen, die IProfileManager implementieren, müssen IComponentebenfalls implementieren.Dies kann erfolgen, indem die Klasse von Componentberechnet.
Beispiele:
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] internal class MyPackageProfileManager : Component, IProfileManager
Stellen Sie sicher, dass die Klasse, die die Einstellungen Zustandsinformationen richtige implementiert, erhält. Dieses Verfahren ist spezifisch für jeden VSPackages und schließt möglicherweise Zustand zum Abrufen von der Automatisierung, fragt Registrierungsschlüssel ab oder fragt ein VSPackage ab.
Normalerweise, wie im folgenden Beispiel, verwenden Sie die Implementierung der LoadSettingsFromStorage-Methode, um zu prüfen und der Phase VSPackage-Zustandsinformationen.
Hinweis
Die LoadSettingsFromStorage-Methode wird auch von der IDE aufgerufen, wenn er ein VSPackage initialisiert, die diese unterstützt.
In diesem Fall wird die Implementierung dieser Methode LoadSettingsFromStorage der Dinge:
Erhält Zugriff auf die Zustandsinformationen in der aktuellen Konfiguration VSPackages und Konfigurationsinformationen, die in der Registrierung gespeichert werden.
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;
Abhängig von dem Wert, der von der MakeCurrentSettingTheDefault VSPackages Methode zurückgegeben wird, aktualisiert sie entweder die Registrierungseinstellungen, indem der aktuellen VSPackage-Zustand oder den Zustand verwendet, indem die Registrierungseinstellungen verwendet.
If mySvc.MyPackage.MakeCurrentSettingTheDefault() Then DirectCast(mySvc.MyPackage.packageState, IComPropertyBrowser).SaveState(pbrsKey) Else DirectCast(mySvc.MyPackage.packageState, IComPropertyBrowser).LoadState(pbrsKey) End If
if (mySvc.MyPackage.MakeCurrentSettingTheDefault()){ ((IComPropertyBrowser)mySvc.MyPackage.packageState).SaveState(pbrsKey); }else{ ((IComPropertyBrowser)mySvc.MyPackage.packageState).LoadState(pbrsKey); }
Der Einfachheit halber in diesem Beispiel, es sei denn, die MakeCurrentSettingsTheDefault-Methode truezurückgibt, wird der aktuelle Status immer auf den Standardwert zurückgesetzt, der in der Registrierung gespeichert wird.
Stellen Sie sicher, dass die Klasse, die die Einstellungen der Implementierung den Zustand auch auf dem Datenträger beibehalten wird.
Das eigentliche Schreiben von Zustandsinformationen zum Festlegen datenträgerdatei muss durch die Klassenimplementierung der SaveSettingsToXml-Methode immer ausgeführt werden. Die spezifischen Einstellungen eines Datenvorgangs werden, hängt von der Implementierung ab.
Allerdings muss die Klasse erhalten Zugriff auf die Zustandsinformationen und über die angegebene IVsSettingsWriter-Schnittstelle verwenden, um Daten in die Datei mit Einstellungen zu speichern.
Normalerweise, wie im folgenden Beispiel überprüft die Implementierung der Methode nicht SaveSettingsToXml Zustandsinformationen. Die Validierung wird in der LoadSettingsFromStorage-Methode ausgeführt. Stattdessen ruft die Implementierung lediglich Zugriff auf die Zustandsinformationen und schreibt es in diesem Fall als Zeichenfolgendaten.
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
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")); }
Implementierungsdetails lauten wie folgt:
Zusätzlich zu den Daten, die explizit geschrieben werden und die Implementierung der Methoden ExportSettings transparent, speichert die Einstellungen auch APIs Visual Studio-Versionsinformationen. Daher Einstellungen gespeichert kann für die Version der IDE verglichen werden, das sie während der Einstellungen einfuhr generiert hat.
Der Wert des Arguments pszSettingName , das auf eine Methode der IVsSettingsWriter-Schnittstelle angegeben wird, muss jedes Datenelement eindeutig bezeichnen, das in eine Einstellungskategorie gespeichert wird.
Hinweis
Namen müssen innerhalb des Bereichs der implementierenden Klasse lediglich eindeutig sein.Die IDE verwendet die GUID der Klasse, die die Einstellungen und den Wert pszSettingName implementiert, um jede gespeicherte Einstellung zu identifizieren.Wenn mehr als eine Methode IVsSettingsWriter , das denselben Wert haben, pszSettingName aufgerufen werden, wird der ursprüngliche Wert in der Einstellungsdatei überschrieben.
Die Einstellungsdatei zufälligen Datenzugriff unterstützt. Daher ist die Reihenfolge von Lese- und Schreibvorgängen nicht von Bedeutung. Im folgenden Beispiel ist die Reihenfolge der Vorgänge Writer in der Implementierung der SaveSettingsToXml-Methode Umkehrung der Lesevorgänge in der LoadSettingsFromXml-Methode.
Wenn die Implementierung in Karteninformationen einem der vier unterstützten Formaten kann, gibt es keine Beschränkung auf, wie viel oder dem Typ der Daten geschrieben werden kann.
Hinweis
Die Arbeitsteilung zwischen LoadSettingsFromStorage und den SaveSettingsToXml-Methode hängt von der Implementierung ab und ist ein wenig beliebigen.Zum Beispiel kann die Implementierung umgeschrieben werden, indem Sie eine leere Implementierung der LoadSettingsFromStorage-Methode und Übernehmen aller Registrierungs- und das Feld Status SaveSettingsToXml-Methode in der Abfrage ausführen.
Registrieren Sie die Einstellungen, die Klasse implementieren, z. B. Unterstützung VSPackage gewährend.
Wenden Sie eine Instanz von ProvideProfileAttribute , die erstellt wird, indem Type der Klasse verwendet, die für die Implementierung IProfileManager VSPackages Package 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 erstellt, wobei Version die Version von Visual Studioz. B. 10.0 ist.
Weitere Informationen finden Sie unter Beibehalten von Einstellungen und 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 data is obtained 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
Convert C# to VB.NET
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 data is obtained 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: Import-Einstellungen mithilfe von verwaltetem Paketframeworks