Gewusst wie: Bearbeiten von Projekten mithilfe des Visual C++-Projektmodells
Das folgende Verfahren veranschaulicht die Vorgehensweise zum Suchen nach Informationen zu Visual C++-Projekten aus einigen Projektmodellobjekten, die über die Microsoft.VisualStudio.ProjectEngine.dll verfügbar sind. Diese Assembly macht die Funktion des Compilers, Linkers und anderen Buildtools und die Funktion des Dialogfelds „Eigenschaftsseiten“ für ein Visual C++-Projekt verfügbar.
Sie können den Code in die folgenden Verfahren in einem VSPackage mit der Bezeichnung TestVCProjectPackage integrieren, das über einen Menübefehl mit der Bezeichnung „Mein Befehlsname“ verfügt. Informationen dazu finden Sie unter Exemplarische Vorgehensweise: Wenn Sie einen Menübefehl mit der Visual Studio-Paket-Vorlage erstellen.
So verwenden Sie VCProjectEngine zur Bearbeitung von Visual C++-Projekten
Fügen Sie einen Verweis zu Microsoft.VisualStudio.VCCodeModel (auf der Registerkarte Erweiterungen) und System.Windows.Forms (auf der Registerkarte Framework) hinzu.
Fügen Sie die folgenden using-Anweisungen zur TestVCProjectPackagePackage.cs-Datei hinzu:
using EnvDTE; using EnvDTE80; using EnvDTE90; using EnvDTE100; using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms;
Entfernen Sie vorhandenen Code aus der MenuItemCallback-Methode. Fügen Sie Code zu dieser Methode hinzu, mit dem das Anwendungsobjekt abgerufen wird (in diesem Fall DTE2:
private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte2 = (DTE2)GetService(typeof(DTE)); }
Rufen Sie in derselben Methode die geöffneten Projekte ab. Stellen Sie sicher, dass ein Projekt tatsächlich geöffnet ist.
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 } }
Rufen Sie das geöffnete Projekt ab und prüfen Sie die Projektkonfigurationen.
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()); } }
Erstellen Sie die Lösung und beginnen Sie mit dem Debuggen. Eine zweite Instanz von Visual Studio wird geöffnet. Diese Instanz heißt experimentelle Instanz.
öffnen Sie in der experimentellen Instanz ein Visual C++-Projekt.
Klicken Sie im Menü Extras auf Mein Befehlsname.
Durch den Befehlscode wird VSLangProj.dll ein Verweis hinzugefügt. Mithilfe des VCAssemblyReference-Objekts werden dann Informationen darüber angezeigt. Außerdem werden mithilfe des VCConfiguration-Objekts alle Konfigurationsnamen aufgezählt und angezeigt. VCFile wird verwendet, um die Dateierweiterungen anzuzeigen, die im Visual C++-Projekt vorhanden sind. Das VCProject-Objekt und das IVCCollection-Objekt werden verwendet, um das Projekt als Visual C++-Projekt zu deklarieren und die Konfigurations- und Dateiauflistungen aufzulisten.