Postupy: Manipulace s projekty pomocí modelu projektu Visual C++
Následující postup ukazuje, jak získat informace o Visual C++ projektů z některé projektu modelu objekty, které jsou k dispozici prostřednictvím Microsoft.VisualStudio.ProjectEngine.dll.Toto sestavení poskytuje funkci kompilátoru, propojovacího programu a další nástroje pro sestavení, a také k funkci dialogové okno Vlastnosti stránky pro Visual C++ projektu.
Kód v následujících postupů můžete integrovat do VSPackage s názvem TestVCProjectPackage, který má příkaz nabídky s názvem název mé příkazu.Informace, jak to provést, naleznete v tématu Názorný postup: Vytváření pomocí šablony balíček Visual Studio příkazu nabídky.
Použití VCProjectEngine k práci s projekty v jazyce Visual C++
Přidejte odkaz na Microsoft.VisualStudio.VCCodeModel (na rozšíření kartu) a System.Windows.Forms (na Framework karty.
Přidejte následující using příkazy k souboru TestVCProjectPackagePackage.cs:
using EnvDTE; using EnvDTE80; using EnvDTE90; using EnvDTE100; using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms;
Odeberte stávající kódu z MenuItemCallback metody.Kód přidat do této metody, které získá objekt aplikace (v takovém případě DTE2:
private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte2 = (DTE2)GetService(typeof(DTE)); }
Ve stejné metodě získejte otevřené projekty.Ujistěte se, že projekt je ve skutečnosti otevřen.
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 } }
Získejte otevřeného projektu a zkontrolovat konfigurace projektu.
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()); } }
Řešení k vytvoření a spuštění ladění.Zobrazí se druhou instanci sady Visual Studio.Tato instance je volána pokusné instance.
Otevřít Visual C++ projektu v pokusné instanci.
Na nástroje nabídky, klikněte na tlačítko název mé příkazu.
Kód příkazu přidá odkaz na VSLangProj.dll a zobrazí informace o jeho pomocí VCAssemblyReference objektu.Také vytvoří výčet a zobrazí všechny názvy konfigurace pomocí VCConfiguration objektu.VCFileslouží k zobrazení přípon souborů, které jsou k dispozici v Visual C++ projektu.VCProject a IVCCollection objekty jsou používány k deklaraci projektu jako Visual C++ projektu a provést výčet kolekce konfigurace a souboru.