방법: 특정 프로젝트 형식의 속성 액세스
Visual Studio 일반 자동화 모델은 모든 Visual Studio 프로젝트 형식의 Properties 컬렉션에 액세스하는 데 사용할 수 있는 Properties 컬렉션을 제공합니다.특히, 프로젝트 속성을 사용하면 보안 설정, 어셈블리 이름 등을 제어할 수 있습니다.
프로젝트 속성을 수동으로 설정하고 검사하려면 Visual Studio IDE(통합 개발 환경)에서 프로젝트를 열고,프로젝트 메뉴에서 속성을 선택합니다.속성 창에는 여러 개의 탭이 있습니다. 탭의 각 창에는 프로젝트의 동작을 정의하고 제어하는 데 사용할 수 있는 속성이 나열되어 있습니다.자동화 모델을 사용하면 이러한 설정을 프로그래밍 방식으로 제어할 수 있습니다.특히, ProjectProperties3의 속성을 사용하면 Visual C# 프로젝트에 대한 속성 페이지의 응용 프로그램, 리소스, 설정, 참조 경로 및 서명 창에 있는 프로젝트 속성을 제어할 수 있습니다.VBProjectProperties3에 정의되어 있는 속성을 사용하면 속성 페이지의 응용 프로그램, 리소스, 설정, 참조 및 서명 창에 있는 Visual Basic 프로젝트 속성 설정을 제어할 수 있습니다.
Visual C# 프로젝트의 속성은 ProjectProperties3에 정의되어 있습니다.Visual Basic 프로젝트의 속성은 VBProjectProperties3에 정의되어 있습니다.MyApplication 및 MyType 속성은 Visual Basic 프로젝트에만 적용됩니다.VBProjectProperties3에 있는 나머지 속성은 ProjectProperties3에 있는 속성과 동일합니다.
Properties 개체를 ProjectProperties3 또는 VBProjectProperties3 개체로 직접 캐스팅하는 방식으로는 이러한 속성에 액세스할 수 없습니다.대신 이러한 속성에는 Properties 컬렉션을 통해 액세스해야 합니다. 이를 위해서는 프로젝트의 특정 형식에 대한 속성 이름을 문자열로 제공하여 Property를 지정합니다.예를 들어, EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); 코드를 사용하여 ApplicationIcon 속성에 액세스할 수 있습니다.
사실상 ProjectProperties3 및 VBProjectProperties3에 정의된 속성은 특정 프로젝트에 사용할 수 있는 속성의 참조 목록입니다. 프로젝트 속성 항목으로서 이러한 속성에 액세스할 수 있습니다.
아래 단계에서는 Visual Studio 추가 기능을 통해 프로그래밍 방식으로 이러한 속성에 액세스하는 방법을 설명합니다.
[!참고]
표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다.이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다.설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다.자세한 내용은 Visual Studio 설정을 참조하십시오.
특정 형식의 프로젝트에 대한 속성에 액세스하려면
Visual C#을 사용하여 Visual Studio 추가 기능 프로젝트를 만듭니다.
프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 VSLangProj, VSLangProj2, VSLangProj80 및 Sytem.Windows.Forms을 선택하고 확인을 클릭합니다.
Connect.cs 파일의 맨 위에 다음과 같은 using 문을 추가합니다.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
다음과 같이 VSProjectProperies라는 새 메서드에 대한 호출을 OnConnection 메서드에서 _addInstance 메서드를 설정하는 줄 뒤에 추가합니다.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectProperties(_applicationObject);
OnConnection 메서드 바로 아래에 VSProjectProperties 메서드를 추가합니다.
public void VSProjectProperties(DTE2 dte) { try { // Open a Visual C# or Visual Basic project // before running this add-in. Project project; project = _applicationObject.Solution.Projects.Item(1); Property prop; prop = project.Properties.Item("AssemblyName"); MessageBox.Show("The assembly name is: " + prop.Value .ToString()); prop.Value = "MyTestAssembly"; MessageBox.Show("The assembly name is now: " + prop.Value.ToString()); // If the project is a Visual Basic project, set // the MyApplication property. if (project.Kind == "{F184B08F-C81C-45F6-A5F6-5ABD9991F28F}") { MessageBox.Show("The project is a Visual Basic Project"); prop = project.Properties.Item("MyType"); MessageBox.Show("The MyType value is: " + prop.Value.ToString()); prop.Value = "Class Library"; MessageBox.Show("The MyType value is now: " + prop.Value.ToString()); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
VSProjectProperties 메서드는 AssemblyName 속성을 설정하거나 가져오기 위해 이 속성을 Property 항목 문자열로 Properties 컬렉션에 전달합니다.Visual Basic 프로젝트의 경우 VSProjectProperties 메서드는 MyType 속성도 설정하고 가져옵니다.
전체 코드는 예제 단원을 참조하십시오.
빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.
Visual Studio IDE에서 Visual C# 또는 Visual Basic 프로젝트를 엽니다.
도구 메뉴에서 추가 기능 관리자를 클릭하고 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다.확인을 클릭하여 추가 기능을 실행합니다.
프로젝트 메뉴에서 속성을 클릭한 다음 속성 창에서 응용 프로그램 탭을 선택하여 어셈블리 이름이 변경되었는지 확인합니다.
프로그래밍 방식으로 변경한 내용이 어셈블리 이름 필드에 반영됩니다.
예제
다음은 Visual Studio에서 자동화를 사용하여 특정 프로젝트 형식에 적용되는 속성에 액세스하는 방법을 보여 주는 기본 Visual Studio 추가 기능 예제입니다.
using System;
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;
namespace myAddin
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
VSProjectProperties(_applicationObject);
}
public void VSProjectProperties(DTE2 dte)
{
try
{
// Open a Visual C# or Visual Basic project
// before running this add-in.
Project project;
project = _applicationObject.Solution.Projects.Item(1);
Property prop;
prop = project.Properties.Item("AssemblyName");
MessageBox.Show("The assembly name is: "
+ prop.Value .ToString());
prop.Value = "MyTestAssembly";
MessageBox.Show("The assembly name is now: "
+ prop.Value.ToString());
// If the project is a Visual Basic project, set
// the MyApplication property.
if (project.Kind == PrjKind.prjKindVBProject)
{
MessageBox.Show
("The project is a Visual Basic Project");
prop = project.Properties.Item("MyType");
MessageBox.Show("The MyType value is: "
+ prop.Value.ToString());
prop.Value = "Class Library";
MessageBox.Show("The MyType 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 EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
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)
VSProjectProperties(_applicationObject)
End Sub
Sub VSProjectProperties(ByVal dte As DTE2)
' Open a Visual C# or Visual Basic project
' before running this add-in.
Try
Dim project As Project
project = _applicationObject.Solution.Projects.Item(1)
Dim prop As [Property]
prop = project.Properties.Item("AssemblyName")
MsgBox("The assembly name is: " _
& prop.Value.ToString())
prop.Value = "MyTestAssembly"
MsgBox("The assembly name is now: " _
& prop.Value.ToString())
' If the project is a Visual Basic project, set
' the MyApplication property.
If project.Kind = PrjKind.prjKindVBProject Then
MsgBox("The project is a Visual Basic Project")
prop = project.Properties.Item("MyType")
MsgBox("The MyType value is: " _
& prop.Value.ToString())
prop.Value = "Class Library"
MsgBox("The MyType value is now: " _
& prop.Value.ToString())
End If
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
코드 컴파일
이 코드를 컴파일하려면 새 Visual Studio 추가 기능 프로젝트를 만들고 OnConnection 메서드의 코드를 예제의 코드로 바꿉니다.추가 기능을 실행하는 방법에 대한 자세한 내용은 방법: 추가 기능 관리자를 사용하여 추가 기능 제어를 참조하십시오.