Passo a passo: Usando o armazenamento de configurações
Embora Visual Studio configurações geralmente são persistentes no registro do sistema, é possível desacoplar o armazenamento de configuração do registro usando um armazenamento de configurações. Usando o armazenamento de configurações em vez do registro simplifica a implantação e promove a segurança.
Há dois tipos de armazenamentos de configurações:
Definições de configuração que são configurações de Visual Studio e VSPackage somente leitura. Visual Studio mescla as configurações de todos os arquivos .pkgdef conhecidos este armazenamento.
Configurações de usuário, que são configurações graváveis, como aqueles que são exibidos em páginas de Opções caixa de diálogo páginas de propriedade e determinadas caixas de diálogo. Extensões de Visual Studio podem usá-los para armazenamento local de pequenas quantidades de dados.
Esta explicação passo a passo mostra como usar os dois tipos de armazenamentos de configuração.
Criando o projeto de exemplo
Esta seção mostra como criar um projeto de armazenamento de configurações básicas.
Para criar o projeto exemplo
Criar um Visual Studio projeto pacote chamado SettingsStorage.
Para obter mais informações sobre como criar um VSPackage gerenciado, consulte Passo a passo: Criando um comando de Menu usando o modelo de pacote de Visual Studio.
Sobre o Select a Programming Language , selecione Visual C#.
Sobre o Selecionar opções VSPackage , selecione Comando de Menu.
No Opções de comando página, alterar o nome do comando para Configurações de armazenamento e ID de comando para cmdidSettingsStorage.
Sobre o Selecionar opções de teste página, desmarque as duas caixas de seleção e clique Concluir.
Pressione F5 para executar a instância experimental do Visual Studio.
Instância experimental, sobre o Ferramentas menu, clique em Configurações de armazenamento.
A seguinte mensagem de erro deve ser exibida.
Microsoft.SettingsStorage.SettingsStoragePackage.MenuItemCallback() interna.
Feche a instância experimental.
Há várias maneiras de saída de texto de um VSPackage. Esta explicação passo a passo mostra como modificar o SettingsStoragePackage.MenuItemCallback método para exibir os resultados de cada um dos seguintes conjuntos de etapas.
Usando o armazenamento de configurações de configuração
Esta seção mostra como usar vários SettingsManager e SettingsStore métodos para detectar e exibir as configurações.
Para usar o armazenamento de configurações de configuração
Abra o arquivo SettingsStoragePackage.cs no editor de código.
Adicione essas linhas no início do arquivo:
using System.Collections.Generic; using Microsoft.VisualStudio.Settings; using Microsoft.VisualStudio.Shell.Settings;
Adicionar estas linhas ao início do MenuItemCallback método:
SettingsManager settingsManager = new ShellSettingsManager(this); SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration);
Isso chama o #ctor construtor e passa uma referência para o VSPackage próprio como o IServiceProvider parâmetro. O construtor retorna um SettingsManager objeto. O GetReadOnlySettingsStore método retorna um SettingsStore objeto chamado ConfigurationSettingsStore. Use este objeto para ler as definições de configuração.
Adicione essas linhas após as linhas na etapa anterior:
bool isVisualWebDevInstalled = configurationSettingsStore.CollectionExists("InstalledProducts\\Visual Web Developer"); string message = "Visual Web Developer Installed: " + isVisualWebDevInstalled;
Pesquisa a configuração configurações armazenamento para a coleção InstalledProducts tem a subcoleção do Visual Web Developer. Se a subcoleção for encontrada, a string de mensagem é definida como "True"; Caso contrário, ele é definido como "False".
Na chamada MessageBox, substitua o valor do parâmetro "SettingsStorage" com a mensagem"nome". O MenuItemCallback método agora deve lembrar isso:
private void MenuItemCallback(object sender, EventArgs e) { SettingsManager settingsManager = new ShellSettingsManager(this); SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration); bool isVisualWebDevInstalled = configurationSettingsStore.CollectionExists("InstalledProducts\\Visual Web Developer"); string message = "Visual Web Developer Installed: " + isVisualWebDevInstalled; IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(0, ref clsid, message, //was "SettingsStorage", //string.Format(CultureInfo.CurrentCulture, //"Inside {0}.MenuItemCallback()", //this.ToString()), string.Empty, 0, //OLEMSGBUTTON.OLEMSGBUTTON_OK, //OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, //OLEMSGICON.OLEMSGICON_INFO, 0, // false out result)); }
Pressione F5 para executar a instância experimental do Visual Studio.
Instância experimental, sobre o Ferramentas menu, clique em Configurações de armazenamento.
Uma mensagem deve ser exibida e o texto Visual Web Developer instalado: seguido por True ou False.
Feche a instância experimental.
Visual Studio implementa o armazenamento de configurações no registro do sistema. Dessa forma, você pode usar um editor do registro, por exemplo, Regedit. exe, para verificar as configurações de usuário e.
Usar um editor do registro para verificar as definições de configuração
Abra Regedit. exe ou outro editor de registro.
Navegue até HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0Exp_Config\InstalledProducts\.
Dica
Certifique-se olhando a chave que contém \10.0Exp_Config\ e não \10.0_Config\.Quando você executar a instância experimental do Visual Studio, as configurações estão na seção do Registro "10.0Exp_Config".
Expanda o nó \Installed Products\. Se a mensagem nas etapas anteriores é Visual Web Developer instalado: verdadeiro, e \Installed Products\ deve conter um nó do Visual Web Developer. Se a mensagem for Visual Web Developer instalado: falso, e \Installed Products\ não deve conter um nó do Visual Web Developer.
Você também pode usar o CollectionExists método para determinar se um determinado serviço está instalado. Você deve saber o tipo de classe de serviço.
Para determinar se um serviço está disponível
No código, substitua o IsVisualWebDevInstalled e instruções de atribuição com as seguintes linhas de mensagem.
string helpServiceGUID = typeof(SVsHelpService).GUID.ToString("B").ToUpper(); bool hasHelpService = configurationSettingsStore.CollectionExists("Services\\" + helpServiceGUID); string message = "Help Service Available: " + hasHelpService;
Pesquisa a configuração configurações armazenamento para o conjunto de serviços que tem a subcoleção nomeada pelo GUID do serviço. Se a subcoleção for encontrada, a string de mensagem é definida como "True"; Caso contrário, ele é definido como "False".
Pressione F5 para executar a instância experimental do Visual Studio.
Instância experimental, sobre o Ferramentas menu, clique em Configurações de armazenamento.
Uma mensagem deve ser exibida e o texto serviço de ajuda disponíveis: seguido por True ou False. Para verificar essa configuração, você pode usar um editor do registro, conforme mostrado nas etapas anteriores.
Feche a instância experimental.
Você também pode usar o GetSubCollectionNames e GetString métodos para listar os serviços que estão registrados no armazenamento de configurações de configuração.
Para listar os serviços disponíveis
Substitua o código nas etapas anteriores com as seguintes linhas.
string message = "First five services:\n"; IEnumerable<string> collection = configurationSettingsStore.GetSubCollectionNames("Services"); int n = 0; foreach (string service in collection) { if (n++ == 5) break; message += configurationSettingsStore.GetString("Services\\" + service, "Name", "Unknown") + "\n"; }
O GetSubCollectionNames chamada de método obtém os nomes dos membros da coleção de serviços. O GetString chamada do método retorna o Name dados de propriedade de cada membro. Se o Name a propriedade não existe, o nome padrão "Desconhecido" é retornado. Nomes resultantes são acrescentados à seqüência de mensagem.
Pressione F5 para executar a instância experimental do Visual Studio.
Instância experimental, sobre o Ferramentas menu, clique em Configurações de armazenamento.
Uma mensagem deve ser exibida e conter o seguinte texto.
Cinco primeiros serviços:PL/SQLtipoAdministradorCompilador do Microsoft Visual BasicSTestExecutionServiceResX RefactorNotify serviço
Sua lista de serviços pode ser diferentes. Para verificar essas configurações, você pode usar o editor do registro.
Feche a instância experimental.
Você pode redefinir as configurações usando o procedimento a seguir.
Para redefinir as configurações de configuração
Clique em Iniciar, clique Todos os programas, clique SDK da Microsoft Visual Studio 2010, clique Ferramentase clique em Redefinir a instância do Microsoft Visual Studio 2010 Experimental.
Aparecerá uma janela de comando.
Esperar até Press any key to continue é retornado e pressione uma tecla para fechar a janela de comando.
Usando o armazenamento de configurações do usuário
Esta seção mostra como adicionar o bloco de notas para Visual Studio como uma ferramenta externa, leitura e gravação para o armazenamento de configurações do usuário.
Para que você pode depurar e repita esta instalação, você deve ser capaz de redefinir as configurações de ferramentas externas. Para fazer isso, você deve salvar as configurações originais para que possa restaurá-los conforme necessário.
Para salvar as configurações de ferramentas externas
Abra Regedit. exe ou outro editor de registro.
Navegue até Tools\ de HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0Exp\External.
Dica
Certifique-se olhando a chave que contém \10.0Exp\ e não \10.0\.Quando você executar a instância experimental do Visual Studio, suas configurações de usuário estão na seção do Registro "10.0Exp".
Clique com o botão direito na subchave \External Tools\ e clique em Exportar. Certifique-se de que ramificação selecionada está selecionada.
Salve o arquivo resultante do Tools.reg externo.
Para restaurar as configurações de ferramentas externas
Clique com o botão direito na subchave de registro \External Tools\ e clique em Excluir.
Quando o Confirmar exclusão da chave caixa de diálogo exibida, clique em Sim.
Clique com o botão direito no arquivo Tools.reg externos, clique em Abrir come clique em O Editor do registro.
Vários SettingsManager e WritableSettingsStore métodos são usados para detectar e modificar as configurações do usuário.
Para usar o armazenamento de configurações do usuário
Abra o arquivo SettingsStoragePackage.cs no editor de código.
No MenuItemCallback método, adicione esta linha de código imediatamente após a instrução de atribuição de ConfigurationSettingsStore:
WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
O GetWritableSettingsStore chamada do método retorna um WritableSettingsStore objeto chamado userSettingsStore. Você usará esse objeto para ler e gravar configurações do usuário.
Após as linhas na etapa anterior, adicione esta linha:
int toolCount = userSettingsStore.GetInt32("External Tools", "ToolNumKeys");
O GetInt32 chamada de método pesquisará o armazenamento de configurações de usuário para a coleção de ferramentas externas e retorna os dados da ToolNumKeys a propriedade como um inteiro. Este é o número de ferramentas externas já instalado.
Após as linhas na etapa anterior, adicione estas linhas:
bool hasNotepad = false; CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo; for (int i = 0; i < toolCount; i++) { if (Compare.IndexOf(userSettingsStore.GetString("External Tools", "ToolCmd" + i), "Notepad", CompareOptions.IgnoreCase) >= 0) { hasNotepad = true; break; } }
As sucessivas GetString chamadas de método retornam os dados das propriedades ToolCmd0, ToolCmd1, e assim por diante. Dados de cada propriedade são o caminho de uma ferramenta externa. O IndexOf chamada de método executa uma pesquisa diferencia maiúsculas de minúsculas do caminho de comando para a seqüência "Bloco de notas". If found, hasNotepad is set to true; Caso contrário, ele permanece false.
Após as linhas na etapa anterior, adicione as seguintes linhas e substituir a instrução de atribuição de cadeia de caracteres de mensagem e todas as outras instruções até o fim do foreach loop.
string message = (hasNotepad) ? "Notepad already installed" : "Installing Notepad"; if (!hasNotepad) { userSettingsStore.SetString("External Tools", "ToolTitle" + toolCount, "&Notepad"); userSettingsStore.SetString("External Tools", "ToolCmd" + toolCount, "C:\\Windows\\notepad.exe"); userSettingsStore.SetString("External Tools", "ToolArg" + toolCount, ""); userSettingsStore.SetString("External Tools", "ToolDir" + toolCount, "$(ProjectDir)"); userSettingsStore.SetString("External Tools", "ToolSourceKey" + toolCount, ""); userSettingsStore.SetUInt32("External Tools", "ToolOpt" + toolCount, 0x00000011); userSettingsStore.SetInt32("External Tools", "ToolNumKeys", toolCount + 1); }
Esse código usa o SetString e SetUInt32 métodos para criar as várias propriedades que instalar o bloco de notas como uma ferramenta externa. Bloco de notas é fornecido a chave de acesso "N" e o diretório do projeto como o diretório inicial. Finalmente, o número de ferramentas externas é incrementado e gravado de volta para o armazenamento de configurações do usuário.
A ferramenta Bloco de notas externa está disponível para teste.
Para testar a configuração da ferramenta externa
Pressione F5 para executar a instância experimental do Visual Studio.
Instância experimental, sobre o Ferramentas menu, clique em Configurações de armazenamento.
Uma mensagem deve ser exibida e o texto Instalar o bloco de notas. Clique em OK.
Sobre o Ferramentas menu, clique em o bloco de notas.
Abre o bloco de notas.
Depois de abre o bloco de notas, feche-o.
Sobre o Ferramentas menu, clique em o bloco de notas novamente.
Uma mensagem deve ser exibida e o texto o bloco de notas já instalado.
Feche o bloco de notas e, em seguida, feche a instância experimental.
Repita esse teste, primeiro restaure as configurações de usuário afetado, conforme descrito anteriormente em "Restaurar as configurações de ferramentas externas".
Usando o armazenamento de configurações de outro processo
Esta explicação passo a passo primeiro mostrou como criar um Gerenciador de configurações (SettingsManager objeto), usando o VSPackage próprio como um provedor de serviços.
SettingsManager settingsManager = new ShellSettingsManager(this);
VSPackages executados no mesmo processo de Visual Studio, mas você também pode acessar o armazenamento de configurações de outro processo usando o ExternalSettingsManager classe.
Para criar um Gerenciador de configurações de outro processo, chamar o CreateForApplication método, passando o caminho completo do executável Visual Studio (devenv. exe). Porque Visual Studio não tem um local predeterminado, você deve examinar o registro do sistema para localizar o caminho. Essa informação está localizada na HKLM\SOFTWARE\Microsoft\VisualStudio\ deversão\InstallDir\ subchave.
Por exemplo, para acessar o armazenamento de configurações de Visual Studio 2010, examine HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\InstallDir\.
Dica
Para um sistema operacional Windows de 64 bits, essa subchave é HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\InstallDir\.
Os dados da propriedade de \InstallDir\ Visual Studio 2010 normalmente serão C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\.
Dica
Para um sistema operacional Windows de 64 bits, esses dados geralmente são c:\Arquivos de programas (x86) \Microsoft Visual Studio 10.0\Common7\IDE\.
O caminho completo é criado acrescentando devenv dados, por exemplo,
string AppIDPath = "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"
Finalmente, chame CreateForApplication para criar as configurações do Gerenciador.
SettingsManager settingsManager = ExternalSettingsManager.CreateForApplication(AppIDPath);