Olá, hoje iremos falar sobre a possibilidade de estender as features do visual Studio.

Anteriormente falamos em um artigo no meu blog sobre a possibilidade de criar templates de projetos e distribuir para os desenvolvedores, evitando repetição de tarefas, também falamos em outro momento sobre o Power Command, uma extensão do visual Studio que adiciona várias funções novas para a IDE. No caso da extensão do Power Command que nada mais é que pacotes de extensibilidade do visual Studio.

Bom hoje iremos aprender a adicionar um menu no visual Studio que chama um formulário qualquer, com este exemplo será possível ver como é fácil estender funcionalidades do visual Studio e ainda integrar sua aplicação na IDE de desenvolvimento.

Para trabalhar com os tipos de projetos de extensibilidade do visual Studio é necessário baixar o SDK, no nosso caso como iremos trabalhar com a versão 2008 iremos baixar o SDK 2008, para baixar acesse: http://www.microsoft.com/downloads/details.aspx?FamilyID=30402623-93ca-479a-867c-04dc45164f5b&displaylang=en

- Após instalar o SDK no Visual Studio vá em New Project/Other Project Types/Extensibility e repare que novos tipos de projetos foram adicionados na sua IDE.

img

Escolha o tipo de projeto Visual Studio integration Package, e posteriormente, deixe o nome do projeto como MeuPrimeiroPacoteVS, na tela que irá aparecer (Wizard VS Integration Package) clique em Next.

img

Selecione a linguagem Visual C# e marque a opção Generate a new key file to sign the assembly e clique em Next.

img

Preencha as informações do pacote (caso queira você pode colocar um ícone personalisado), é importante notar a versão do pacote e o edição mínima do visual Studio (para deploy do Pacote) no nosso caso estamos trabalhando com a versão mínimo Standard ou estamos dizendo que nosso pacote irá funcionar em edições standard para cima do visual studio.

img

Escolha o Menu Command, neste estamos dizendo que a funcionalidade será inserida dentro do contexto do menu do VS.

img

Vamos inserir na tela de Command Options o nome que irá aparecer no menu (Command name) e o Id do comando na tela.

Por fim, clique em Next desmarque as opções de teste (não iremos utilizar testes unitários neste exemplo), e clique em Finish.

Pronto nosso pacote, esta pronto, para testarmos de um F5 (Start Debugging), e veja que uma versão diferente da IDE (Experimental Hive) que você esta utilizando será chamada para você, vá em Tools e procure o comando que acabou de criar.

            Após clicar no menu Chamar tela repare que um messageBox será chamado:

img

NOTA: O Experimental Hive permite que você debug os seus pacotes sem registrar nada na IDE de desenvolvimento, pois cada VSPackage contém um registro no Register da máquina. Falaremos mais sobre isso no segundo post onde iremos fazer o deploy deste VSPackage.

 

Feche o Visual Studio Experimenta Hive, e vá no Solution Explorer do seu projeto e Add/New Item do tipo Windows Form, coloque o nome de formVsPackage.

Altere as seguintes propriedades do seu formulário.

Propriedade

Valor

Text

“Customizando Visual Studio.”

StarPosition

“CenterScreen”

 

Repare que agora você pode criar um projeto como quiser, ou seja, pode fazer um acesso a banco, pode chamar aplicações e etc.

Para finalizar nosso projeto vamos alterar a classe MeuPrimeiroPacoteVSPackage.cs e altere o evento MenuItemCallback para :

  ///

/// This function is the callback used to execute a command when the a menu item is clicked.

/// See the Initialize method to see how the menu item is associated to this function using

/// the OleMenuCommandService service and the MenuCommand class.

///

private void MenuItemCallback(object sender, EventArgs e)

{

    new formVsPackage().ShowDialog();

}

 

Conforme o comentário do evento esta função é chamada quando o item do meu é clicado, aperte F5 e veja o resultado.

Repare que agora quando você clica na opção de Chamar Tela, o formulário que acabamos de criar é chamado.

Bom, vamos sofisticar um pouco este código. Imagine que você precise garantir que esta função apenas será utilizada quando uma solução estiver aberta no contexto do Visual Studio, como fazer ?

Para isso iremos utilizar o namespace EnvDTE, vá em Add Reference/ .NET e adicione EnvDTE ao seu projeto.

Adicione a referencia na classe:

using EnvDTE;

 

Agora iremos crie um método chamado ProjetoAberto que retorne um tipo boleano.

Ex:

private bool ProjetoAberto()

{

            //Interface para trabalhar com as opções do visual studio

            DTE dte;

 

            //Pegando o tipo através do VS Container.

            dte = (DTE)GetService(typeof(DTE));

 

            //Verificando se a solução esta aberta.

            if (dte != null)

                return dte.Solution.IsOpen;

            else

                return false;

}

 

Repare que neste método estamos utilizando a interface DTE do namespace EnvDTE, ela possibilita acessar as funções internas do visual Studio, em nosso exemplo estamos verificando e retornando o valor da propriedade IsOpen de Solution (representa a solução).

Agora vamos alterar o evento MenuItemCallback para verificar se ProjetoAberto retorna true antes de chamar o formulário, senão apresente um messageBox informando o usuário que ele precisa estar com uma solução aberta para utilizar a função chamar tela.

Veja como deve ficar:

private void MenuItemCallback(object sender, EventArgs e)

        {

            if (ProjetoAberto())

                new formVsPackage().ShowDialog();

            else

                MessageBox.Show("É necessário estar com uma solução aberta para utilizar esta função.");

        }

 

Agora rode o VsPackage novamente e tente acessar o menu sem criar uma solução no visual Studio, e repare que o messageBox irá aparecer, em seguida crie um projeto qualquer e tente rodar a aplicação novamente, e veja que agora o formulário que criamos será chamado.

 

Bom espero que esta dica seja útil, e em breve iremos irei escreve como criar um setup (deploy) dos seus pacotes e distribuir ele para os demais desenvolvedores/usuários.

 

Para saber mais acesse:

http://blogs.msdn.com/vsxue/archive/2007/11/15/tutorial-2-creating-your-first-vspackage.aspx

http://msdn.microsoft.com/en-us/vsx/default.aspx

 

Um grande abraço, e até mais.

Nelson Borges
____________________________________________