새 프로젝트 생성: 내부 살펴보기, 2부
새 프로젝트 생성: 내부 살펴보기, 1부에서 새 프로젝트 대화 상자가 어떻게 채워지는지 살펴보았습니다. Visual C# Windows 애플리케이션을 선택하고 이름 및 위치 텍스트 상자를 채우고 확인을 클릭했다고 가정해 보겠습니다.
솔루션 파일 생성
애플리케이션 템플릿을 선택하면 Visual Studio에서 해당 .vstemplate 파일의 압축을 풀고 열고 템플릿을 시작하여 이 파일의 XML 명령을 해석합니다. 이러한 명령은 새 솔루션 또는 기존 솔루션에서 프로젝트 및 프로젝트 항목을 만듭니다.
템플릿은 .vstemplate 파일이 있는 동일한 .zip 폴더에서 항목 템플릿이라고 하는 소스 파일의 압축을 풉니다. 템플릿은 이러한 파일을 새 프로젝트에 복사하여 이에 따라 사용자 지정합니다.
템플릿 매개 변수 대체
템플릿이 항목 템플릿을 새 프로젝트에 복사할 때 템플릿 매개 변수를 문자열로 대체하여 파일을 사용자 지정합니다. 템플릿 매개 변수는 $date$와 같이 앞에 달러 기호가 오는 특수 토큰입니다.
일반적인 프로젝트 항목 템플릿을 살펴보겠습니다. Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip 폴더에서 Program.cs의 압축을 풀고 검사합니다.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace $safeprojectname$
{
static class Program
{
// source code deleted here for brevity
}
}
Simple이라는 새 Windows 애플리케이션 프로젝트를 만드는 경우 템플릿은 $safeprojectname$
매개 변수를 프로젝트 이름으로 바꿉니다.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Simple
{
static class Program
{
// source code deleted here for brevity
}
}
템플릿 매개 변수의 전체 목록은 템플릿 매개 변수를 참조하세요.
.VSTemplate 파일 내부 살펴보기
기본 .vstemplate 파일의 형식은 다음과 같습니다.
<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
</TemplateData>
<TemplateContent>
</TemplateContent>
</VSTemplate>
새 프로젝트 생성: 내부 살펴보기, 1부의 <TemplateData> 섹션을 살펴보았습니다. 이 섹션의 태그는 새 프로젝트 대화 상자의 모양을 제어하는 데 사용됩니다.
<TemplateContent> 섹션의 태그는 새 프로젝트 및 프로젝트 항목의 생성을 제어합니다. 다음은 \Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip 폴더에 있는 cswindowsapplication.vstemplate 파일의 <TemplateContent> 섹션입니다.
<TemplateContent>
<Project File="WindowsApplication.csproj" ReplaceParameters="true">
<ProjectItem ReplaceParameters="true"
TargetFileName="Properties\AssemblyInfo.cs">
AssemblyInfo.cs
</ProjectItem>
<ProjectItem TargetFileName="Properties\Resources.resx">
Resources.resx
</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Properties\Resources.Designer.cs">
Resources.Designer.cs
</ProjectItem>
<ProjectItem TargetFileName="Properties\Settings.settings">
Settings.settings
</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Properties\Settings.Designer.cs">
Settings.Designer.cs
</ProjectItem>
<ProjectItem ReplaceParameters="true" OpenInEditor="true">
Form1.cs
</ProjectItem>
<ProjectItem ReplaceParameters="true">
Form1.Designer.cs
</ProjectItem>
<ProjectItem ReplaceParameters="true">
Program.cs
</ProjectItem>
</Project>
</TemplateContent>
<Project> 태그는 프로젝트 생성을 제어하고 <ProjectItem> 태그는 프로젝트 항목 생성을 제어합니다. ReplaceParameters 매개 변수가 true인 경우 템플릿은 프로젝트 파일 또는 항목의 모든 템플릿 매개 변수를 사용자 지정합니다. 이 경우 Settings.settings를 제외한 모든 프로젝트 항목이 사용자 지정됩니다.
TargetFileName 매개 변수는 결과 프로젝트 파일 또는 항목의 이름과 상대 경로를 지정합니다. 이렇게 하면 프로젝트에 대한 폴더 구조를 만들 수 있습니다. 이 인수를 지정하지 않으면 프로젝트 항목은 프로젝트 항목 템플릿과 동일한 이름을 갖게 됩니다.
결과 Windows 애플리케이션 폴더 구조는 다음과 같습니다.
템플릿의 첫 번째이자 유일한 <Project> 태그는 다음과 같습니다.
<Project File="WindowsApplication.csproj" ReplaceParameters="true">
그러면 새 프로젝트 템플릿이 템플릿 항목 windowsapplication.csproj를 복사하고 사용자 지정하여 Simple.csproj 프로젝트 파일을 만들도록 지시합니다.
디자이너 및 참조
솔루션 탐색기에서 속성 폴더가 있고 예상 파일이 포함되어 있음을 확인할 수 있습니다. 그러나 Resources.Designer.cs에서 Resources.resx로, Form1.Designer.cs에서 Form1.cs로와 같은 프로젝트 참조 및 디자이너 파일 종속성은 어떨까요? 이러한 파일은 생성될 때 Simple.csproj 파일에 설정됩니다.
다음은 프로젝트 참조를 생성하는 Simple.csproj의 <ItemGroup>입니다.
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
이러한 참조는 솔루션 탐색기에 나타나는 6개의 프로젝트 참조임을 알 수 있습니다. 다음은 다른 <ItemGroup>의 섹션입니다. 명확성을 위해 많은 코드 줄이 삭제되었습니다. 이 섹션에서는 Settings.Designer.cs가 Settings.settings에 종속되도록 합니다.
<ItemGroup>
<Compile Include="Properties\Settings.Designer.cs">
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>