방법: 특정 프로젝트 형식에 대한 구성 속성 액세스
업데이트: 2007년 11월
Visual Studio 일반 자동화 모델은 모든 Visual Studio 프로젝트 형식의 Properties 컬렉션에 액세스하는 데 사용할 수 있는 Properties 컬렉션을 제공합니다. 특히, 프로젝트 속성을 사용하면 보안 설정, 빌드 구성 및 디버깅 구성을 제어할 수 있습니다.
프로젝트 속성을 수동으로 설정하고 검사하려면 Visual Studio IDE(통합 개발 환경)에서 프로젝트를 열고, 프로젝트 메뉴에서 속성을 선택합니다. 속성 창에는 여러 개의 탭이 있습니다. 탭의 각 창에는 프로젝트의 동작을 정의하고 제어하는 데 사용할 수 있는 속성이 나열되어 있습니다. 자동화 모델을 사용하면 이러한 설정을 프로그래밍 방식으로 제어할 수 있습니다. 특히 CSharpProjectConfigurationProperties4, VBProjectConfigurationProperties4, JSharpProjectConfigurationProperties3 및 ProjectConfigurationProperties3에 나열되어 있는 속성을 사용하면 현재 활성 구성의 속성 페이지에서 빌드(Visual Basic 프로젝트의 경우 컴파일) 및 디버그속성 창에 있는 프로젝트 속성을 제어할 수 있습니다.
ConfigurationManager 개체에 액세스하여 현재 활성화되지 않은 다른 구성을 선택할 수도 있습니다. 자세한 내용은 방법: 솔루션 및 프로젝트 빌드 구성 만들기를 참조하십시오.
Visual C# 및 Visual J# 프로젝트의 구성 속성은 각각 CSharpProjectConfigurationProperties4 및 JSharpProjectConfigurationProperties3에 정의되어 있습니다. CodePage, DisableLangXtns, JCPA 및 SecureScoping 속성은 Visual J# 프로젝트에만 적용됩니다. ErrorReport 및 LanguageVersion 속성은 Visual C# 프로젝트에만 적용됩니다. CSharpProjectConfigurationProperties3 및 JSharpProjectConfigurationProperties3에 있는 나머지 속성은 ProjectConfigurationProperties3에 있는 속성과 동일합니다.
Property 개체를 CSharpProjectConfigurationProperties3, JSharpProjectConfigurationProperties3 또는 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 J# 또는 Visual Basic 프로젝트 중 어떠한 프로젝트를 정의하는지에 따라 CSharpProjectConfigurationProperties3.EnableSQLServerDebugging, JSharpProjectConfigurationProperties3.EnableSQLServerDebugging 또는 ProjectConfigurationProperties3.EnableSQLServerDebugging 속성에 액세스합니다.
사실상 CSharpProjectConfigurationProperties3, JSharpProjectConfigurationProperties3 또는 ProjectConfigurationProperties3에 정의된 구성 속성은 특정 프로젝트에 사용할 수 있는 구성 속성의 참조 목록이며, Properties 컬렉션을 통해 프로젝트 구성 속성 항목으로서 이러한 구성 속성에 액세스할 수 있습니다.
아래 단계에서는 Visual Studio 추가 기능을 통해 현재 활성 구성의 구성 속성에 프로그래밍 방식으로 액세스하는 방법을 설명합니다.
참고: |
---|
표시되는 대화 상자와 메뉴 명령은 실제 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
특정 형식의 프로젝트에 대한 구성 속성에 액세스하려면
Visual C#을 사용하여 Visual Studio 추가 기능 프로젝트를 만듭니다.
프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 System.Windows.Forms, VSLangProj, VSLangProj2 및 VSLangProj80을 선택하고 확인을 클릭합니다.
Connect.cs 파일의 맨 위에 다음과 같은 using 문을 추가합니다.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using System.Windows.Forms;
OnConnection 함수에 다음 함수 호출을 추가합니다.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectConfigProperties(_applicationObject);
OnConnection 메서드 바로 아래에 VSProjectConfigProperties 메서드를 추가합니다.
public void VSProjectConfigProperties(DTE2 dte) { try { // Open a Visual C#, Visual J#, 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()); } if (project.Kind == PrjKind2.prjKindVJSharpProject) { MessageBox.Show("The project is a Visual J# Project"); prop = configProps.Item("CodePage"); MessageBox.Show("The code page value is : " + prop.Value.ToString()); MessageBox.Show ("Setting the code page value to my code page"); prop.Value = "my code page"; MessageBox.Show("The code page value is now: " + prop.Value.ToString()); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
VSProjectConfigProperties 메서드는 PlatformTarget 속성 값을 가져오고 표시합니다. 이 메서드는 WarningLevel 속성을 설정하고 가져옵니다. Visual C# 프로젝트의 경우 VSProjectConfigProperties 메서드는 LanguageVersion 속성을 설정하고 가져옵니다. Visual J# 프로젝트의 경우 이 메서드는 CodePage 속성을 설정하고 가져옵니다.
빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.
Visual Studio IDE에서 Visual C#, Visual J# 또는 Visual Basic 프로젝트를 엽니다.
도구 메뉴에서 추가 기능 관리자를 클릭하고 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.
프로젝트 메뉴에서 속성을 클릭한 다음 속성 창에서 빌드 탭을 선택하여 경고 수준이 변경되었는지 확인합니다.
프로그래밍 방식으로 변경한 내용이 경고 수준 필드에 반영됩니다.
Visual C# 프로젝트에 대한 언어 버전 설정을 확인하려면 속성 창의 빌드 창에서 고급을 클릭합니다.
추가 기능에서 변경한 내용이 고급 빌드 설정 대화 상자의 언어 버전 필드에 반영됩니다.
Visual J# 프로젝트의 코드 페이지 설정에 대한 변경 사항을 확인하려면 속성 창의 빌드 창에서 고급을 클릭합니다.
이 속성에 대한 변경 내용이 고급 빌드 설정 대화 상자의 코드 페이지 필드에 반영됩니다.
예제
다음은 Visual Studio에서 자동화를 사용하여 특정 프로젝트 형식의 속성에 액세스하는 방법을 보여 주는 기본 Visual Studio 추가 기능 예제입니다.
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
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#, Visual J#, 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());
}
if (project.Kind == PrjKind2.prjKindVJSharpProject)
{
MessageBox.Show("The project is a Visual J# Project");
prop = configProps.Item("CodePage");
MessageBox.Show("The code page value is : "
+ prop.Value.ToString());
MessageBox.Show
("Setting the code page value to my code page");
prop.Value = "my code page";
MessageBox.Show("The code page 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
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#, Visual J#, 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
If project.Kind = PrjKind2.prjKindVJSharpProject Then
MsgBox("The project is a Visual J# Project")
prop = configProps.Item("CodePage")
MsgBox("The code page value is : " _
& prop.Value.ToString())
MsgBox("Setting the code page value to my code page")
prop.Value = "my code page"
MsgBox("The code page value is now: " _
& prop.Value.ToString())
End If
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
코드 컴파일
이 코드를 컴파일하려면 새 Visual Studio 추가 기능 프로젝트를 만들고 OnConnection 메서드의 코드를 예제의 코드로 바꿉니다. 추가 기능을 실행하는 방법에 대한 내용은 방법: 추가 기능 관리자를 사용하여 추가 기능 제어를 참조하십시오.