Condividi tramite


Procedura: modificare i progetti tramite il modello di progetto di Visual C++

La procedura seguente illustra come trovare informazioni sui progetti Visual C++ da alcuni oggetti del modello di progetto disponibili mediante Microsoft.VisualStudio.ProjectEngine.dll. Questo assembly espone le funzionalità del compilatore, del linker e di altri strumenti di compilazione nonché le funzionalità della finestra di dialogo Pagine delle proprietà relative a un progetto Visual C++.

È possibile integrare il codice nelle procedure seguenti in un VSPackage denominato TestVCProjectPackage che contiene un comando di menu denominato My Command name. Per informazioni su come eseguire questa operazione, vedere procedura dettagliata: Creazione di un comando di menu utilizzando il modello importa pacchetto Visual Studio.

Per usare VCProjectEngine per la modifica di progetti Visual C++

  1. Aggiungere un riferimento a Microsoft.VisualStudio.VCCodeModel (nella scheda Estensioni) e System.Windows.Forms (nella scheda Framework.

  2. Aggiungere le istruzioni using seguenti al file TestVCProjectPackagePackage.cs:

    using EnvDTE;
    using EnvDTE80;
    using EnvDTE90;
    using EnvDTE100;
    using Microsoft.VisualStudio.VCCodeModel;
    using System.Windows.Forms;
    
  3. Rimuovere il codice esistente dal metodo MenuItemCallback. Aggiungere al metodo codice per ottenere l'oggetto applicazione (in questo caso DTE2:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        DTE2 dte2 = (DTE2)GetService(typeof(DTE));
    }
    
  4. Nello stesso metodo, ottenere i progetti aperti. Verificare che sia effettivamente aperto un progetto.

    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
        }
    }
    
  5. Ottenere il progetto aperto e verificare le configurazioni di progetto.

    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());
        }
    }
    
  6. Compilare la soluzione e avviare il debug. Verrà visualizzata una seconda istanza di Visual Studio. Questa istanza è denominata istanza sperimentale.

  7. Aprire un progetto Visual C++ nell'istanza sperimentale.

  8. Nel menu Strumenti fare clic suMy Command name.

    Il codice del comando aggiunge un riferimento a VSLangProj.dll e visualizza le relative informazioni mediante l'oggetto VCAssemblyReference. Inoltre, enumera e visualizza tutti i nomi di configurazione mediante l'oggetto VCConfiguration. VCFile viene usato per visualizzare le estensioni di file presenti nel progetto Visual C++. Gli oggetti VCProject e IVCCollection consentono di dichiarare il progetto come Visual C++ e di enumerare la configurazione e le raccolte di file.

Vedere anche

Concetti

modello di progetto di Visual C++

Modello di codice Visual C++

Altre risorse

Modello a oggetti Extensibility di Visual C++

Modello di procedura guidata Visual C++