다음을 통해 공유


방법: 특정 프로젝트 형식에 대한 구성 속성 액세스

Visual Studio 일반 자동화 모델은 모든 Visual Studio 프로젝트 형식의 Properties 컬렉션에 액세스하는 데 사용할 수 있는 Properties 컬렉션을 제공합니다. 특히, 프로젝트 속성을 사용하면 보안 설정, 빌드 구성 및 디버깅 구성을 제어할 수 있습니다.

프로젝트 속성을 수동으로 설정하고 검사하려면 Visual Studio IDE(통합 개발 환경)에서 프로젝트를 열고, 프로젝트 메뉴에서 속성을 선택합니다. 속성 창에는 여러 개의 탭이 있습니다. 탭의 각 창에는 프로젝트의 동작을 정의하고 제어하는 데 사용할 수 있는 속성이 나열되어 있습니다. 자동화 모델을 사용하면 이러한 설정을 프로그래밍 방식으로 제어할 수 있습니다. 특히 CSharpProjectConfigurationProperties4, VBProjectConfigurationProperties4ProjectConfigurationProperties3에 나열되어 있는 속성을 사용하면 현재 활성 구성의 속성 페이지에서 빌드(Visual Basic 프로젝트의 경우 컴파일) 및 디버그 속성 창에 있는 프로젝트 속성을 제어할 수 있습니다.

ConfigurationManager 개체에 액세스하여 현재 활성화되지 않은 다른 구성을 선택할 수도 있습니다. 자세한 내용은 방법: 솔루션 및 프로젝트 빌드 구성 만들기을 참조하십시오.

Visual C# 프로젝트의 구성 속성은 CSharpProjectConfigurationProperties4에 정의되어 있습니다. ErrorReportLanguageVersion 속성은 Visual C# 프로젝트에만 적용됩니다. CSharpProjectConfigurationProperties3에 있는 나머지 속성은 ProjectConfigurationProperties3에 있는 속성과 동일합니다.

Property 개체를 CSharpProjectConfigurationProperties3 또는 ProjectConfigurationProperties3 개체에 직접 캐스팅하는 방식으로는 이러한 구성 속성에 액세스할 수 없습니다. 이러한 속성에 액세스하려면 다음과 같이 구성 항목의 이름을 문자열로 전달해야 합니다.

    EnvDTE.Project proj;
    EnvDTE.Configuration config;
    EnvDTE.Properties configProps;
    EnvDTE.Property prop;
    proj = DTE.Solution.Projects.Item(1);
    config = proj.ConfigurationManager.ActiveConfiguration;
    configProps = config.Properties;
    prop = configProps.Item("EnableSQLServerDebugging")

이 코드는 proj 변수에 정의된 Visual C# 또는 Visual Basic 프로젝트에 따라 CSharpProjectConfigurationProperties3.EnableSQLServerDebugging 또는 ProjectConfigurationProperties3.EnableSQLServerDebugging 속성에 액세스합니다.

사실상 CSharpProjectConfigurationProperties3 또는 ProjectConfigurationProperties3에 정의된 구성 속성은 특정 프로젝트에 사용할 수 있는 구성 속성의 참조 목록이며, Properties 컬렉션을 통해 프로젝트 구성 속성 항목으로서 이러한 구성 속성에 액세스할 수 있습니다.

아래 단계에서는 Visual Studio 추가 기능을 통해 현재 활성 구성의 구성 속성에 프로그래밍 방식으로 액세스하는 방법을 설명합니다.

참고

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다.설치한 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다.자세한 내용은 Visual Studio에서 개발 설정 사용자 지정을 참조하십시오.

특정 형식의 프로젝트에 대한 구성 속성에 액세스하려면

  1. Visual Studio가 시작되면 Visual C#을 사용하고 추가 기능을 로드하는 옵션을 선택하여 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 System.Windows.Forms, VSLangProj, VSLangProj2VSLangProj80을 선택하고 확인을 클릭합니다.

  3. Connect.cs 파일의 맨 위에 다음과 같은 using 문을 추가합니다.

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    using VSLangProj90;
    using VSLangProj100;
    using System.Windows.Forms;
    
  4. OnConnection 함수에 다음 함수 호출을 추가합니다.

    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectConfigProperties(_applicationObject);
    
  5. OnConnection 메서드 바로 아래에 VSProjectConfigProperties 메서드를 추가합니다.

    public void VSProjectConfigProperties(DTE2 dte)
    {
        try
        {
            // Open a Visual C# or Visual Basic project
            // before running this add-in.
            Project project;
            Configuration config;
            Properties configProps;
            Property prop;
            project = _applicationObject.Solution.Projects.Item(1);
            config = project.ConfigurationManager.ActiveConfiguration;
            configProps = config.Properties;
            prop = configProps.Item("PlatformTarget");
            MessageBox.Show("The platform target for this project is: "
     + prop.Value.ToString());
            prop = configProps.Item("WarningLevel");
            MessageBox.Show
    ("The warning level for this project is set to: " 
    + prop.Value.ToString());
            MessageBox.Show("Changing the warning level to 3...");
            prop.Value = "3";
            MessageBox.Show
    ("The warning level for this project is now set to: " 
    + prop.Value.ToString());
            if (project.Kind == PrjKind.prjKindCSharpProject)
            {
                MessageBox.Show("The project is a Visual C# Project");
                prop = configProps.Item("LanguageVersion");
                MessageBox.Show("The language version value is : " 
    + prop.Value.ToString());
                MessageBox.Show("Setting the language version to 
    ISO-1");
                prop.Value = "ISO-1";
                MessageBox.Show("The language version value is now: " 
    + prop.Value.ToString());
            }
    
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    VSProjectConfigProperties 메서드는 PlatformTarget 속성 값을 가져오고 표시합니다. 이 메서드는 WarningLevel 속성을 설정하고 가져옵니다. Visual C# 프로젝트의 경우 VSProjectConfigProperties 메서드는 LanguageVersion 속성을 설정하고 가져옵니다.

  6. 빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.

  7. Visual Studio IDE에서 Visual C# 또는 Visual Basic 프로젝트를 엽니다.

  8. 도구 메뉴에서 추가 기능 관리자를 클릭하고 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.

  9. 프로젝트 메뉴에서 속성을 클릭한 다음 속성 창에서 빌드 탭을 선택하여 경고 수준이 변경되었는지 확인합니다.

    프로그래밍 방식으로 변경한 내용이 경고 수준 필드에 반영됩니다.

  10. Visual C# 프로젝트에 대한 언어 버전 설정을 확인하려면 속성 창의 빌드 창에서 고급을 클릭합니다.

    추가 기능에서 변경한 내용이 고급 빌드 설정 대화 상자의 언어 버전 필드에 반영됩니다.

예제

다음은 Visual Studio에서 자동화를 사용하여 특정 프로젝트 형식의 속성에 액세스하는 방법을 보여 주는 기본 Visual Studio 추가 기능 예제입니다.

using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using EnvDTE90a;
using EnvDTE100;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
using VSLangProj100;
public void OnConnection(object application, 
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectConfigProperties(_applicationObject);
}
public void VSProjectConfigProperties(DTE2 dte)
{
    try
    {
        // Open a Visual C# or Visual Basic project
        // before running this add-in.
        Project project;
        Configuration config;
        Properties configProps;
        Property prop;
        project = _applicationObject.Solution.Projects.Item(1);
        config = project.ConfigurationManager.ActiveConfiguration;
        configProps = config.Properties;
        prop = configProps.Item("PlatformTarget");
        MessageBox.Show("The platform target for this project is: 
" + prop.Value.ToString());
        prop = configProps.Item("WarningLevel");
        MessageBox.Show
("The warning level for this project is set to: " 
+ prop.Value.ToString());
        MessageBox.Show("Changing the warning level to 3...");
        prop.Value = "3";
        MessageBox.Show
("The warning level for this project is now set to: " 
+ prop.Value.ToString());
        if (project.Kind == PrjKind.prjKindCSharpProject)
        {
            MessageBox.Show("The project is a Visual C# Project");
            prop = configProps.Item("LanguageVersion");
            MessageBox.Show("The language version value is : " 
+ prop.Value.ToString());
            MessageBox.Show("Setting the language version to ISO-1");
            prop.Value = "ISO-1";
            MessageBox.Show("The language version value is now: " 
+ prop.Value.ToString());
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Imports VSLangProj100
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)
    VSProjectConfigProperties(_applicationObject)
End Sub
Sub VSProjectConfigProperties(ByVal dte As DTE2)
    ' Open a Visual C# or Visual Basic project
    ' before running this add-in.
    Try
        Dim project As Project
        Dim config As Configuration
        Dim configProps As Properties
        Dim prop As [Property]
        project = _applicationObject.Solution.Projects.Item(1)
        config = project.ConfigurationManager.ActiveConfiguration
        configProps = config.Properties
        prop = configProps.Item("PlatformTarget")
        MsgBox("The platform target for this project is: "  _
        & prop.Value.ToString())
        prop = configProps.Item("WarningLevel")
        MsgBox("The warning level for this project is set to: "  _
        & prop.Value.ToString())
        MsgBox("Changing the warning level to 3...")
        prop.Value = "3"
        MsgBox("The warning level for this project is now set to: " _
        & prop.Value.ToString())
        If project.Kind = PrjKind.prjKindCSharpProject Then
            MsgBox("The project is a Visual C# Project")
            prop = configProps.Item("LanguageVersion")
            MsgBox("The language version value is : "  _
            & prop.Value.ToString())
            MsgBox("Setting the language version to ISO-1")
            prop.Value = "ISO-1"
            MsgBox("The language version value is now: "  _
            & prop.Value.ToString())
        End If
    Catch ex As System.Exception
        MsgBox(ex.ToString)
    End Try
End Sub

코드 컴파일

이 코드를 컴파일하려면 새 Visual Studio 추가 기능 프로젝트를 만들고 OnConnection 메서드의 코드를 예제의 코드로 바꿉니다. 추가 기능을 실행하는 방법에 대한 내용은 방법: 추가 기능 관리자를 사용하여 추가 기능 제어를 참조하십시오.

참고 항목

기타 리소스

Project Properties

특정 프로젝트 형식의 프로젝트, 프로젝트 항목 및 구성 속성에 액세스