Procedura: Esporta impostazioni utilizzando il pacchetto gestito Framework
L'ambiente di sviluppo integrato di (IDE) Visual Studio utilizza le classi che implementano l'interfaccia e le classi di IProfileManager registrate come supporto a quella specificata di un VSPackage per salvare lo stato di un VSPackage.
Poiché l'ide crea un'istanza di una classe che implementa l'interfaccia di IProfileManager per supportare le impostazioni, IProfileManager deve essere implementato in una classe indipendente.
Nota
Non distribuire IProfileManager sulla classe che implementa Package.
Per implementare l'esportazione delle impostazioni
Dichiarare una classe che implementa le impostazioni di Visual Studio .
Dichiarare una classe come implementare l'interfaccia di IProfileManager e fornirla a un GUID.
Nota
Le classi che implementano IProfileManager deve implementare anche IComponent.Questa operazione può essere eseguita derivando una classe da Component.
Di seguito è riportato un esempio:
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] internal class MyPackageProfileManager : Component, IProfileManager
Verificare che la classe che implementa le impostazioni ottiene le informazioni sullo stato corrette. Questa procedura è specifica di ogni package VS e può includere ottenere lo stato da automazione, eseguire una query sulle chiavi del Registro di sistema, o interrogare il package VS.
In genere, come nell'esempio seguente, utilizzare l'implementazione del metodo di LoadSettingsFromStorage per convalidare e appoggio delle informazioni sullo stato di un VSPackage.
Nota
Il metodo di LoadSettingsFromStorage viene chiamato dall'IDE quando si inizializza il package VS che supporta.
In questo caso, l'implementazione del metodo di LoadSettingsFromStorage effettuare queste operazioni:
Ottiene l'accesso alle informazioni sullo stato nella configurazione e le informazioni di configurazione correnti di un VSPackage archiviate nel Registro di sistema.
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;
A seconda del valore restituito dal metodo di MakeCurrentSettingTheDefault del package VS, aggiorna le impostazioni del Registro di sistema utilizzando lo stato corrente di package VS, lo stato o tramite le impostazioni del Registro di sistema.
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); }
Per semplicità in questo esempio, a meno che il metodo di MakeCurrentSettingsTheDefault restituisca true, lo stato corrente viene reimpostato sempre predefiniti che viene memorizzato nel Registro di sistema.
Verificare che la classe che implementa le impostazioni anche mantiene lo stato su disco.
Effettiva scrittura di informazioni sullo stato del file su disco delle impostazioni venga sempre eseguita dall'implementazione della classe del metodo di SaveSettingsToXml . Le specifiche di un'operazione del writer delle impostazioni dipendono da essa.
Tuttavia, la classe deve accedere alle informazioni sullo stato e deve utilizzare l'interfaccia fornita di IVsSettingsWriter per salvare i dati nel file dell'impostazione.
In genere, come nell'esempio, l'implementazione del metodo di SaveSettingsToXml non convalida le informazioni sullo stato. La convalida viene eseguita nel metodo di LoadSettingsFromStorage . Invece, l'implementazione solo ottiene l'accesso alle informazioni sullo stato e lo scrive, in questo caso, in formato stringa.
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")); }
I dettagli di implementazione sono le seguenti:
Oltre ai dati esplicitamente scritti eimplementazione del metodo di ExportSettings , le API inoltre salva le informazioni sulla versione di Visual Studio . Di conseguenza, le impostazioni salvate possono essere si confrontano alla versione dell'IDE che le ha generate durante l'importazione delle impostazioni.
Il valore dell'argomento di pszSettingName assegnato a un metodo di interfaccia di IVsSettingsWriter necessario identificare in modo univoco ogni elemento dati salvato in una categoria di impostazioni.
Nota
I nomi devono essere univoci solo nella classe di implementazione.L'ide utilizza il GUID della classe che implementa le impostazioni e il valore di pszSettingName per identificare ogni impostazione salvata.Se più di un metodo di IVsSettingsWriter con lo stesso valore di pszSettingName viene chiamato, il valore originale viene sovrascritto nel file di impostazioni.
Il file di impostazioni supporta l'accesso ai dati casuali, pertanto l'ordine delle operazioni di lettura e scrittura non è importante. Nell'esempio seguente, l'ordine delle operazioni del writer nell'implementazione del metodo di SaveSettingsToXml rappresenta l'opposto di operazioni di lettura nel metodo di LoadSettingsFromXml .
Se l'implementazione può dati di mapping in uno dei quattro formati supportati, pertanto non è la restrizione su o sul tipo di dati possono essere scritti.
Nota
La suddivisione del lavoro tra LoadSettingsFromStorage e i metodi di SaveSettingsToXml dipenderà da ed è in qualche modo arbitrario.Ad esempio, l'implementazione potrebbe essere riscritta utilizzando un'implementazione vuota del metodo di LoadSettingsFromStorage e facendo tutti i eseguire il Registro di sistema e query dello stato nel metodo di SaveSettingsToXml .
Registrare le impostazioni che implementano la classe come fornire supporto in un VSPackage.
Applicare un'istanza di ProvideProfileAttribute costruita utilizzando Type della classe che implementa IProfileManager implementazione di un 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
In questo caso, l'attributo all'IDE che la classe di MyPackageProfileManager fornisce un'implementazione delle impostazioni alla classe di MyPackage . Il passaggio di impostazioni personalizzato nel Registro di sistema viene creato in \Software\Microsoft\VisualStudio HKLM \versione\UserSettings\ CoreUI_MyPackage, dove versione è la versione di Visual Studio, ad esempio, 10,0.
Per ulteriori informazioni, vedere Rendere persistenti le impostazioni e ProvideProfileAttribute.
Esempio
Nell'esempio seguente viene implementato IProfileManager su una classe.
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);
}
}
}
}
}
}
}
Vedere anche
Attività
Procedura: Impostazioni di importazione tramite il pacchetto gestito Framework