Поделиться через


Практическое руководство. Управление проектами при помощи модели проекта Visual C++

В следующей процедуре показано, как искать информацию о проектах Visual C++ в некоторых объектах модели проекта, доступных в библиотеке Microsoft.VisualStudio.ProjectEngine.dll. Данная сборка использует функциональные возможности компилятора, компоновщика и других встроенных средств, а также функциональные возможности диалогового окна "Страницы свойств" для проекта Visual C++.

Вы можете интегрировать код в указанные ниже процедуры, используя VSPackage с именем TestVCProjectPackage, в котором есть команда меню "Мое имя команды". Дополнительные сведения об этой операции см. в разделе Пошаговое руководство: Создание команды меню ресурсов с помощью шаблона пакета Visual Studio.

Использование VCProjectEngine для управления проектами Visual C++

  1. Добавьте ссылку на Microsoft.VisualStudio.VCCodeModel (на вкладке Расширения) и System.Windows.Forms (на вкладке Framework).

  2. Добавьте следующие операторы using в файл TestVCProjectPackagePackage.cs:

    using EnvDTE;
    using EnvDTE80;
    using EnvDTE90;
    using EnvDTE100;
    using Microsoft.VisualStudio.VCCodeModel;
    using System.Windows.Forms;
    
  3. Удалите существующий код из метода MenuItemCallback. Добавьте в данный метод код, позволяющий получить объект приложения (в данном случае DTE2:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        DTE2 dte2 = (DTE2)GetService(typeof(DTE));
    }
    
  4. В том же методе получите открытые проекты. Убедитесь, что проект действительно открыт.

    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. Получите открытый проект и проверьте настройки проекта.

    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. Постройте решение и запустите отладку. Откроется второй экземпляр Visual Studio. Он называется экспериментальным.

  7. Откройте проект Visual C++ в экспериментальном экземпляре.

  8. В меню Сервис выберите пункт Мое имя команды.

    Код команды добавляет ссылку на VSLangProj.dll и отображает информацию об этой библиотеке с помощью объекта VCAssemblyReference. Он также перечисляет и отображает все имена конфигурации с помощью объекта VCConfiguration. VCFile используется для отображения расширений файлов, присутствующих в проекте Visual C++. Объекты VCProject и IVCCollection используются для объявления проекта как проекта Visual C++ и для перечисления файлов коллекций и конфигурации.

См. также

Основные понятия

модель проекта Visual C++

модель кода Visual C++

Другие ресурсы

Объектная модель расширяемости Visual C++

Модель мастера Visual C++