Практическое руководство. Создание конфигураций построения решения и проекта

Обновлен: Ноябрь 2007

Модель автоматизации Visual Studio предлагает объекты для управления конфигурациями построений решения и проекта. Конфигурация построения решения определяет, как будет осуществляться построение и развертывание (если разрешено) проектов. Конфигурации построения проекта, перечисленные в диалоговом окне Страницы свойств проекта, включают список всех доступных типов построения проекта, таких как Debug или Release, и список всех доступных платформ, таких как .NET или Win32. Для каждого сочетания построения и платформы существует своя конфигурация проекта — набор определенных свойств и параметров проекта.

Объекты, относящиеся к конфигурации построения решения:

Имя объекта

Описание

Объект SolutionBuild2

Используется для построения, очистки и развертывания активной конфигурации решения.

Объект SolutionConfiguration2

Представляет список проектов и их конфигураций, которые будут участвовать в построении.

Коллекция SolutionConfigurations

Содержит все определенные объекты SolutionConfiguration.

Объект SolutionContext

Представляет конфигурацию проекта в объекте SolutionConfiguration.

Коллекция SolutionContexts

Содержит все объекты SolutionContext в объекте SolutionConfiguration.

Объект BuildDependency

Представляет проект, который должен быть построен до построения проекта-владельца.

Коллекция BuildDependencies

Содержит все проекты, которые должны быть построены до построения проекта-владельца.

Объекты, относящиеся к конфигурации построения проекта.

Имя объекта

Описание

Объект ConfigurationManager

Представляет конфигурацию построения и платформы.

Объект Configuration

Представляет конфигурацию или набор параметров построения для указанной платформы.

Коллекция Configurations

Содержит все объекты Configuration.

Объект OutputGroup

Содержит файлы, которые входят в построение проекта.

Коллекция OutputGroups

Содержит все объекты OutputGroup.

Использование этих объектов дает следующие возможности:

  • Создавать, активировать и удалять конфигурации решения, а также добавлять к ним проекты.

  • Строить, запускать или развертывать любой проект в конфигурации решения.

  • Получать сведения об объектах конфигурации проекта или решения.

  • Добавлять, удалять и получать сведения о зависимостях построения проекта.

80bh6a6h.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Эти процедуры были разработаны с обычными параметрами разработки. Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Пример

Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    SConfig(_applicationObject)
End Sub
Sub SConfig(ByVal dte As DTE2)
    Dim SB As SolutionBuild2 =  _
    CType(_applicationObject.Solution.SolutionBuild, _
    SolutionBuild2)
    Dim SolCtx As SolutionContext
    Dim Proj As Project
    Dim CM As ConfigurationManager
    Dim Cfgs As SolutionConfigurations
    Dim Cfg As SolutionConfiguration2
    Dim msg As String

    ' Get a reference to the solution configurations 
    ' solution context of the first project.
    SolCtx = SB.SolutionConfigurations.Item(1).SolutionContexts.Item(1)
   CM = _applicationObject.Solution.Projects. _
    Item(1).ConfigurationManager
    Proj = _applicationObject.Solution.Projects.Item(1)
    Cfgs = _applicationObject.Solution.SolutionBuild. _
    SolutionConfigurations
    Cfg = CType(Cfgs.Item(1), SolutionConfiguration2)

    ' List the current solution build info.
    msg = "BuildState = "
    Select Case SB.BuildState
        Case vsBuildState.vsBuildStateNotStarted
            msg = msg & "Build has not yet started." & vbCr
        Case vsBuildState.vsBuildStateInProgress
            msg = msg & "Build is in progress." & vbCr
        Case vsBuildState.vsBuildStateDone
            msg = msg & "Build has completed." & vbCr
    End Select
    msg = msg & "Configuration Name = " & SolCtx.ConfigurationName _
    & vbCr
    msg = msg & "Platform Name = " & SolCtx.PlatformName & vbCr
    msg = msg & "Project Name = " & SolCtx.ProjectName & vbCr
    MsgBox(msg)

    ' List the current solution configurations.
    msg = ("Configuration names are:" & vbCr)
    For Each Cfg In Cfgs
        msg = msg & Cfg.Name & vbCr
    Next
    MsgBox(msg)
   ' Add a new solution configuration.
   Cfgs.Add("ANewConfiguration", "Debug", False)
   MsgBox(Cfgs.Item(1).Name)
   ' Create a new project build configuration based on the Debug 
   ' configuration.
   Proj.ConfigurationManager.AddConfigurationRow("MyNewConfig", _
    "Debug", True)
   ' Build the solution configuration.
   sb.SolutionConfigurations.Item("MyConfig").Activate()
   sb.Build()
End Sub
public void OnConnection(object application, 
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    SConfig(_applicationObject);
}
public void SConfig(DTE2 dte)
{
    try
    {
        SolutionBuild2 SB =
 (SolutionBuild2)_applicationObject.Solution.SolutionBuild;
        SolutionContext SolCtx;
        Project Proj;
        ConfigurationManager CM;
        SolutionConfigurations Cfgs;
        SolutionConfiguration2 Cfg;
        String msg;
        // Get a reference to the solution configurations
        // solution context of the first project.
        SolCtx = SB.SolutionConfigurations.Item(1).
SolutionContexts.Item(1);
        CM = dte.Solution.Projects.Item(1).ConfigurationManager;
        Proj = _applicationObject.Solution.Projects.Item(1);
        Cfgs = _applicationObject.Solution.
SolutionBuild.SolutionConfigurations;
        Cfg = (SolutionConfiguration2)Cfgs.Item(1);
        // List the current solution build info.
        msg = "BuildState = ";
        switch (SB.BuildState)
        {
            case vsBuildState.vsBuildStateNotStarted:
                msg = (msg + "Build has not yet started." + "\n");
            break;
            case vsBuildState.vsBuildStateInProgress:
                msg = (msg + "Build is in progress." + "\n");
            break;
            case vsBuildState.vsBuildStateDone:
                msg = (msg + "Build has completed." + "\n");
            break;
        }
        msg = msg + "Configuration Name = " + 
SolCtx.ConfigurationName + "\n";
        msg = msg + "Platform Name = " + SolCtx.PlatformName + "\n";
        msg = msg + "Project Name = " + SolCtx.ProjectName + "\n";
        MessageBox.Show(msg);
        // List the current solution configurations.
        msg = "Configuration names are:" + "\n";
        foreach(SolutionConfiguration2 tempConfigs in Cfgs)
        {
            msg = msg + tempConfigs.Name + "\n";
        }
        MessageBox.Show(msg);
        // Add a new solution configuration.
        Cfgs.Add("ANewConfiguration", "Debug", false);
        MessageBox.Show
("The name of the first solution configuration item is: " 
+ Cfgs.Item(1).Name);
        // Create a new project build configuration based on the 
        // Debug configuration.
        Proj.ConfigurationManager.AddConfigurationRow
("MyNewConfig", "Debug", true);
        // Build the debug solution configuration.
        MessageBox.Show("Build the solution in the debug mode...");
        SB.SolutionConfigurations.Item("Debug").Activate();
        SB.Build(true);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Exception: " + ex);
    }
}

Компиляция кода

Для компиляции кода создайте новый проект надстройки Visual Studio и замените код в классе Connect.cs или Connect.vb кодом из данного примера. Перед запуском надстройки откройте проект в интегрированной среде разработки Visual Studio. Сведения о запуске надстройки см. в разделе Практическое руководство. Управление надстройками с помощью диспетчера надстроек.

См. также

Задачи

Практическое руководство. Добавление и обработка команд

Практическое руководство. Создание надстройки

Пошаговое руководство. Создание мастера

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

Знакомство с решениями, проектами и элементами

Диаграмма модели объектов автоматизации

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

Построение в Visual Studio

Создание окон среды и управление ими

Создание надстроек и мастеров

Справочник по автоматизации и возможностям расширения среды