Como manipular projetos usando o modelo de projeto do Visual C++
O procedimento a seguir mostra como encontrar informações sobre projetos do Visual C++ entre alguns dos objetos de modelo de projeto disponíveis através do Microsoft.VisualStudio.ProjectEngine.dll. Esse assembly expõe a funcionalidade do compilador, do vinculador e de outras ferramentas de compilação, bem como a funcionalidade da caixa de diálogo Páginas de Propriedade de um projeto do Visual C++.
É possível integrar o código nos procedimentos a seguir em um VSPackage nomeado TestVCProjectPackage que contenha um comando de menu chamado Nome do Meu Comando. Para obter informações sobre como fazer isso, consulte Passo a passo: Criando um comando de Menu usando o modelo de pacote de Visual Studio.
Usar o VCProjectEngine para manipular projetos do Visual C++
Adicione uma referência para Microsoft.VisualStudio.VCCodeModel (na guia Extensões) e System.Windows.Forms (na guia Framework.
Adicione as seguintes instruções using ao arquivo TestVCProjectPackagePackage.cs:
using EnvDTE; using EnvDTE80; using EnvDTE90; using EnvDTE100; using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms;
Remova o código existente do método MenuItemCallback. Adicione código a esse método que obtém o objeto do aplicativo (nesse caso DTE2:
private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte2 = (DTE2)GetService(typeof(DTE)); }
No mesmo método, obtenha os projetos abertos. Certifique-se de que um projeto esteja realmente aberto.
private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte2 = (DTE2)GetService(typeof(DTE)); VCProject prj; Projects projColl = dte2.Solution.Projects; if (projColl.Count == 0) { MessageBox.Show("You must have a project open in the experimental instance."); return; } if (projColl.Count > 0) { // to be filled in later } }
Obtenha o projeto aberto e inspecione as configurações do projeto.
private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte2 = (DTE2)GetService(typeof(DTE)); VCProject prj; VCAssemblyReference vcar; int idx; IVCCollection mycollection, mycollection2; VCConfiguration cfg; String sTest = "Configuration Information:" + "\n"; VCFile file; try { Projects projColl = dte2.Solution.Projects; if (projColl.Count == 0) { MessageBox.Show("You must have a project open in the experimental instance."); return; } if (projColl.Count > 0) { prj = (VCProject)dte2.Solution.Projects.Item(1).Object; if (prj.CanAddAssemblyReference(@"%VSINSTALLDIR%\Common7\IDE\PublicAssemblies\VSLangProj.dll")) { vcar = (VCAssemblyReference)prj.AddAssemblyReference(@"%VSINSTALLDIR%\Common7\IDE\PublicAssemblies\VSLangProj.dll"); MessageBox.Show("The assembly named" + vcar.AssemblyName + " was added."); } mycollection = (IVCCollection)prj.Configurations; MessageBox.Show("Number of configurations in the project : " + mycollection.Count); for (idx = 1; idx <= mycollection.Count; idx++) { cfg = (VCConfiguration)mycollection.Item(idx); sTest = sTest + "Configuration name: " + cfg.Name + "\n" + "Platform: " + "\n" + cfg.Platform.ToString() + "\n" + "Program database: \n" + cfg.ProgramDatabase + "\n"; } MessageBox.Show(sTest); mycollection2 = (IVCCollection)prj.Files; MessageBox.Show("Number of files in the project: " + mycollection2.Count); } } catch (SystemException ex) { MessageBox.Show("ERROR: " + ex.ToString()); } }
Compile a solução e inicie a depuração. Uma segunda instância do Visual Studio é exibida. Essa instância é chamada de instância experimental.
Abra um projeto do Visual C++ na instância experimental.
No menu Ferramentas, clique em Nome do Meu Comando.
O código do comando adiciona uma referência ao VSLangProj.dll e exibe informações sobre ele usando o objeto VCAssemblyReference. Também enumera e exibe todos os nomes de configuração usando o objeto VCConfiguration. VCFile é usado para exibir as extensões de arquivo que estão presentes no projeto do Visual C++. Os objetos VCProject e IVCCollection são usados para declarar o projeto como um projeto do Visual C++ e para enumerar as coleções de arquivo e de configuração.
Consulte também
Conceitos
Modelo de projeto do Visual C++
Modelo de código do Visual C++