Porady: manipulowanie projektami za pomocą modelu projektów Visual C++
Poniższa procedura pokazuje, jak znaleźć informacje dotyczące Visual C++ projektów z niektórych projektu modelu obiektów dostępnych za pośrednictwem Microsoft.VisualStudio.ProjectEngine.dll.Ten zestaw udostępnia funkcje kompilator, łączenie i inne narzędzia kompilacji, a także do funkcji okna dialogowego właściwości strony Visual C++ projektu.
Kod w podanych niżej procedur można zintegrować VSPackage o nazwie TestVCProjectPackage zawierającej polecenie menu o nazwie polecenie Moja nazwa.Aby uzyskać więcej informacji na ten temat, zobacz Instruktaż: Tworzenie polecenia Menu przy użyciu szablonu pakietu Visual Studio.
Aby użyć VCProjectEngine do manipulowania projektów Visual C++
Dodaj odwołanie do Microsoft.VisualStudio.VCCodeModel (na rozszerzenia kartę) i System.Windows.Forms (na struktury karty.
Dodaj następujący using instrukcji do pliku TestVCProjectPackagePackage.cs:
using EnvDTE; using EnvDTE80; using EnvDTE90; using EnvDTE100; using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms;
Usuń istniejący kod z MenuItemCallback metody.Dodawanie kodu do tej metody, która wykrywa obiektu aplikacji (w tym przypadku DTE2:
private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte2 = (DTE2)GetService(typeof(DTE)); }
W tej samej metody Pobierz otwartych projektów.Upewnij się, że projekt jest aktualnie otwarte.
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 } }
Pobierz otwartego projektu i sprawdzić konfiguracji 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()); } }
Tworzenie to rozwiązanie i rozpocząć debugowanie.Zostanie wyświetlone drugie wystąpienie programu Visual Studio.To wystąpienie jest wywoływana doświadczalnych wystąpienia.
Otwórz Visual C++ projektu w wystąpieniu doświadczalnych.
Na narzędzia menu, kliknij przycisk polecenie Moja nazwa.
Polecenie kod dodaje odwołanie do VSLangProj.dll i wyświetla informacje o jego przy użyciu VCAssemblyReference obiektu.Również wylicza i wyświetla wszystkie nazwy konfiguracji za pomocą VCConfiguration obiektu.VCFileSłuży do wyświetlania rozszerzeń plików, które znajdują się w Visual C++ projektu.VCProject i IVCCollection obiekty są używane do deklarowania projektu jako Visual C++ projektu i wyliczyć kolekcje konfiguracji i plików.