방법: 프로젝트 템플릿에 마법사 사용
적용 대상:![]()
Mac
용 Visual Studio Visual Studio Visual Studio Code
Visual Studio에서는 사용자가 템플릿을 사용하여 프로젝트를 만들 때 사용자 지정 코드를 실행할 수 있도록 설정하여 구현 시 IWizard 인터페이스를 제공합니다.
프로젝트 템플릿 사용자 지정을 사용하여 사용자 입력을 수집하여 템플릿을 사용자 지정하거나, 템플릿에 파일을 추가하거나, 프로젝트에서 허용되는 다른 작업을 수집하는 사용자 지정 UI를 표시할 수 있습니다.
인터페이스 메서드는 IWizard 프로젝트를 만드는 동안 사용자가 새 프로젝트 대화 상자에서 확인을 클릭하는 즉시 시작하여 다양한 시간에 호출됩니다. 인터페이스의 각 메서드는 호출되는 지점을 설명하기 위해 이름이 지정됩니다. 예를 들어 Visual Studio는 프로젝트를 만들기 시작할 때 즉시 호출 RunStarted 하므로 사용자 입력을 수집하는 사용자 지정 코드를 작성하는 것이 좋습니다.
VSIX 프로젝트를 사용하여 프로젝트 템플릿 프로젝트 만들기
Visual Studio SDK의 일부인 프로젝트 템플릿 프로젝트를 사용하여 사용자 지정 템플릿을 만들기 시작합니다. 이 절차에서는 C# 프로젝트 템플릿 프로젝트를 사용하지만 Visual Basic 프로젝트 템플릿 프로젝트도 있습니다. 그런 다음 프로젝트 템플릿 프로젝트가 포함된 솔루션에 VSIX 프로젝트를 추가합니다.
C# 프로젝트 템플릿 프로젝트를 만듭니다(Visual Studio에서새>프로젝트 파일> 선택 및 "프로젝트 템플릿" 검색). 이름을 MyProjectTemplate으로 지정합니다.
참고
Visual Studio SDK를 설치하라는 메시지가 표시될 수 있습니다. 자세한 내용은 Visual Studio SDK 설치를 참조하세요.
프로젝트 템플릿 프로젝트와 동일한 솔루션에 새 VSIX 프로젝트를 추가합니다(솔루션 탐색기에서 솔루션 노드를 선택하고 마우스 오른쪽 단추를 클릭하고새 프로젝트추가>를 선택하고 "vsix"를 검색). 이름을 MyProjectWizard로 지정합니다.
VSIX 프로젝트를 시작 프로젝트로 설정합니다. 솔루션 탐색기에서 VSIX 프로젝트 노드를 선택하고 마우스 오른쪽 단추를 클릭한 다음 시작 프로젝트로 설정을 선택합니다.
템플릿 프로젝트를 VSIX 프로젝트의 자산으로 추가합니다. 솔루션 탐색기의 VSIX 프로젝트 노드 아래에서 source.extension.vsixmanifest 파일을 찾습니다. 두 번 클릭하여 매니페스트 편집기에서 엽니다.
매니페스트 편집기에서 창의 왼쪽에 있는 자산 탭을 선택합니다.
자산 탭에서 새로 만들기를 선택합니다. 새 자산 추가 창의 형식 필드에 대해 Microsoft.VisualStudio.ProjectTemplate을 선택합니다. 원본 필드에서 현재 솔루션에서 프로젝트를 선택합니다. 프로젝트 필드에서 MyProjectTemplate을 선택합니다. 그런 후 OK를 클릭합니다.
솔루션을 빌드하고 디버깅을 시작합니다. 두 번째 Visual Studio 인스턴스가 표시됩니다. (몇 분이 걸릴 수 있습니다.)
Visual Studio의 두 번째 인스턴스에서 새 템플릿을 사용하여 새 프로젝트를 만듭니다(새>프로젝트파일>, "myproject" 검색). 새 프로젝트는 Class1이라는 클래스와 함께 표시됩니다. 이제 사용자 지정 프로젝트 템플릿을 만들었습니다. 이제 디버깅을 중지합니다.
사용자 지정 템플릿 만들기 마법사
이 절차에서는 프로젝트를 만들기 전에 Windows Form을 여는 사용자 지정 마법사를 만드는 방법을 보여 줍니다. 이 양식을 사용하면 프로젝트를 만드는 동안 소스 코드에 추가되는 사용자 지정 매개 변수 값을 추가할 수 있습니다.
어셈블리를 만들 수 있도록 VSIX 프로젝트를 설정합니다.
솔루션 탐색기에서 VSIX 프로젝트 노드를 선택합니다. 솔루션 탐색기 아래에 속성 창이 표시됩니다. 그렇지 않은 경우 속성 보기>창을 선택하거나 F4 키를 누릅니다. 속성 창에서 다음 필드를
true선택합니다.VSIX 컨테이너에 어셈블리 포함
로컬 VSIX 배포에 디버그 기호 포함
VSIX 컨테이너에 디버그 기호 포함
VSIX 프로젝트에 어셈블리를 자산으로 추가합니다. source.extension.vsixmanifest 파일을 열고 자산 탭을 선택합니다. 새 자산 추가 창에서 형식에 대해 Microsoft.VisualStudio.Assembly를 선택하고 원본의 경우현재 솔루션에서 프로젝트를 선택하고 프로젝트의 경우 MyProjectWizard를 선택합니다.
VSIX 프로젝트에 다음 참조를 추가합니다. ( 솔루션 탐색기의 VSIX 프로젝트 노드에서 참조를 선택하고 마우스 오른쪽 단추를 클릭한 다음 참조 추가를 선택합니다.) 참조 추가 대화 상자의 프레임워크 탭에서 System.Windows Forms 어셈블리를 찾아 선택합니다. 또한 System 및System.Drawing 어셈블리를 찾아 선택합니다. 이제 확장 탭 을 선택합니다. EnvDTE 어셈블리를 찾아 선택합니다. 또한 Microsoft.VisualStudio.TemplateWizardInterface 어셈블리를 찾아 선택합니다. 확인을 클릭합니다.
마법사 구현에 대한 클래스를 VSIX 프로젝트에 추가합니다. ( 솔루션 탐색기에서 VSIX 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가, 새 항목, 클래스를 차례로 선택합니다.) 클래스 이름을 WizardImplementation으로 지정합니다.
WizardImplementationClass.cs 파일의 코드를 다음 코드로 바꿉니다.
using System; using System.Collections.Generic; using Microsoft.VisualStudio.TemplateWizard; using System.Windows.Forms; using EnvDTE; namespace MyProjectWizard { public class WizardImplementation:IWizard { private UserInputForm inputForm; private string customMessage; // This method is called before opening any item that // has the OpenInEditor attribute. public void BeforeOpeningFile(ProjectItem projectItem) { } public void ProjectFinishedGenerating(Project project) { } // This method is only called for item templates, // not for project templates. public void ProjectItemFinishedGenerating(ProjectItem projectItem) { } // This method is called after the project is created. public void RunFinished() { } public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) { try { // Display a form to the user. The form collects // input for the custom message. inputForm = new UserInputForm(); inputForm.ShowDialog(); customMessage = UserInputForm.CustomMessage; // Add custom parameters. replacementsDictionary.Add("$custommessage$", customMessage); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } // This method is only called for item templates, // not for project templates. public bool ShouldAddProjectItem(string filePath) { return true; } } }이 코드에서 참조되는 UserInputForm 은 나중에 구현됩니다.
클래스에는
WizardImplementation모든 멤버에 대한 메서드 구현이 IWizard포함됩니다. 이 예제에서는 메서드만 RunStarted 작업을 수행합니다. 다른 모든 메서드는 아무 작업도 수행하지 않거나 반환true합니다.이 메서드는 RunStarted 다음 네 개의 매개 변수를 허용합니다.
Dictionary<TKey,TValue> 템플릿에 미리 정의된 모든 매개 변수의 컬렉션을 포함하는 매개 변수입니다. 템플릿 매개 변수에 대한 자세한 내용은 템플릿 매개 변수를 참조하세요.
WizardRunKind 사용 중인 템플릿 종류에 대한 정보를 포함하는 매개 변수입니다.
Object Visual Studio에서 마법사에 전달한 매개 변수 집합을 포함하는 배열입니다.
다음은 사용자 입력 양식의 매개 변수 값을 매개 변수에 추가하는 예제입니다 Dictionary<TKey,TValue> . 프로젝트에 있는 매개 변수의
$custommessage$모든 인스턴스는 사용자가 입력한 텍스트로 대체됩니다.
이제 UserInputForm을 만듭니다. WizardImplementation.cs 파일에서 클래스의
WizardImplementation끝 뒤에 다음 코드를 추가합니다.public partial class UserInputForm : Form { private static string customMessage; private TextBox textBox1; private Button button1; public UserInputForm() { this.Size = new System.Drawing.Size(155, 265); button1 = new Button(); button1.Location = new System.Drawing.Point(90, 25); button1.Size = new System.Drawing.Size(50, 25); button1.Click += button1_Click; this.Controls.Add(button1); textBox1 = new TextBox(); textBox1.Location = new System.Drawing.Point(10, 25); textBox1.Size = new System.Drawing.Size(70, 20); this.Controls.Add(textBox1); } public static string CustomMessage { get { return customMessage; } set { customMessage = value; } } private void button1_Click(object sender, EventArgs e) { customMessage = textBox1.Text; this.Close(); } }사용자 입력 양식은 사용자 지정 매개 변수를 입력하기 위한 간단한 양식을 제공합니다. 양식에 이름이 지정된 텍스트 상자와 이름이 인
textBox1button1단추가 있습니다. 단추를 클릭하면 텍스트 상자의 텍스트가 매개 변수에customMessage저장됩니다.
사용자 지정 템플릿에 마법사 연결
사용자 지정 프로젝트 템플릿에서 사용자 지정 마법사를 사용하려면 마법사 어셈블리에 서명하고 사용자 지정 프로젝트 템플릿에 일부 줄을 추가하여 새 프로젝트를 만들 때 마법사 구현을 찾을 위치를 알려야 합니다.
어셈블리에 서명 합니다. 솔루션 탐색기에서 VSIX 프로젝트를 선택하고 마우스 오른쪽 단추를 클릭한 다음 프로젝트 속성을 선택합니다.
프로젝트 속성 창에서 서명 탭을 선택합니다. 서명 탭에서 어셈블리 서명을 선택합니다. 강력한 이름 키 파일 선택 필드에서 새로> 만들기를 선택합니다<. 강력한 이름 키 만들기 창의 키 파일 이름 필드에 key.snk를 입력합니다. 암호 필드로 내 키 파일 보호 의 선택을 취소합니다.
솔루션 탐색기에서 VSIX 프로젝트를 선택하고 속성 창을 찾습니다.
빌드 출력 복사를 출력 디렉터리 필드로 true로 설정합니다. 이렇게 하면 솔루션을 다시 빌드할 때 어셈블리를 출력 디렉터리에 복사할 수 있습니다. 여전히 파일에 포함되어 있습니다
.vsix. 서명 키를 찾으려면 어셈블리를 확인해야 합니다.솔루션을 다시 빌드합니다.
이제 MyProjectWizard 프로젝트 디렉터리(<디스크 위치>\MyProjectTemplate\MyProjectWizard\key.snk)에서 key.snk 파일을 찾을 수 있습니다. key.snk 파일을 복사합니다.
출력 디렉터리로 이동하여 어셈블리(<디스크 위치>\MyProjectTemplate/MyProjectWizard\bin\Debug\MyProjectWizard.dll)를 찾습니다. 여기에 key.snk 파일을 붙여넣습니다. (반드시 필요한 것은 아니지만 다음 단계를 더 쉽게 수행할 수 있습니다.)
명령 창을 열고 어셈블리가 만들어진 디렉터리로 변경합니다.
sn.exe 서명 도구를 찾습니다. 예를 들어 Windows 10 64비트 운영 체제에서 일반적인 경로는 다음과 같습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 도구
도구를 찾을 수 없는 경우 명령 창에서 /R . sn.exe실행 해 보세요. 경로를 기록해 둡다.
key.snk 파일에서 공개 키를 추출합니다. 명령 창에서 를 입력합니다.
<sn.exe\sn.exe > -p key.snk outfile.key의 위치입니다.
디렉터리 이름에 공백이 있는 경우 sn.exe 경로를 따옴표로 묶는 것을 잊지 마세요.
아웃파일에서 공개 키 토큰을 가져옵니다.
<sn.exe\sn.exe > -t outfile.key의 위치입니다.
다시, 따옴표를 잊지 마세요. 다음과 같이 출력에 선이 표시되어야 합니다.
공개 키 토큰은 토큰입니다 <.>
이 값을 적어 두세요.
사용자 지정 마법사에 대한 참조를 프로젝트 템플릿의 .vstemplate 파일에 추가합니다. 솔루션 탐색기에서 MyProjectTemplate.vstemplate이라는 파일을 찾아 엽니다. TemplateContent> 섹션의 <끝 후 다음 섹션을 추가합니다.
<WizardExtension> <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=token</Assembly> <FullClassName>MyProjectWizard.WizardImplementation</FullClassName> </WizardExtension>여기서 MyProjectWizard 는 어셈블리의 이름이며 토큰 은 이전 단계에서 복사한 토큰입니다.
프로젝트의 모든 파일을 저장하고 다시 빌드합니다.
템플릿에 사용자 지정 매개 변수 추가
이 예제에서 템플릿으로 사용되는 프로젝트는 사용자 지정 마법사의 사용자 입력 형식에 지정된 메시지를 표시합니다.
솔루션 탐색기에서 MyProjectTemplate 프로젝트로 이동하여 Class1.cs를 엽니다.
애플리케이션의
Main메서드에서 다음 코드 줄을 추가합니다.Console.WriteLine("$custommessage$");매개 변수
$custommessage$는 템플릿에서 프로젝트를 만들 때 사용자 입력 양식에 입력된 텍스트로 바뀝다.
템플릿으로 내보내기 전의 전체 코드 파일은 다음과 같습니다.
using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
namespace $safeprojectname$
{
public class Class1
{
static void Main(string[] args)
{
Console.WriteLine("$custommessage$");
}
}
}
사용자 지정 마법사 사용
이제 템플릿에서 프로젝트를 만들고 사용자 지정 마법사를 사용할 수 있습니다.
솔루션을 다시 빌드하고 디버깅을 시작합니다. Visual Studio의 두 번째 인스턴스가 나타납니다.
새 MyProjectTemplate 프로젝트를 만듭니다. (파일>새로운>Project).
새 프로젝트 대화 상자에서 "myproject"를 검색하여 템플릿을 찾고, 이름을 입력하고, 확인을 클릭합니다.
마법사 사용자 입력 양식이 열립니다.
사용자 지정 매개 변수의 값을 입력하고 단추를 클릭합니다.
마법사 사용자 입력 양식이 닫히면 템플릿에서 프로젝트가 만들어집니다.
솔루션 탐색기에서 소스 코드 파일을 마우스 오른쪽 단추로 클릭하고 코드 보기를 클릭합니다.
$custommessage$마법사 사용자 입력 양식에 입력된 텍스트로 대체되었습니다.