다음을 통해 공유


새 프로젝트 생성: 내부 살펴보기, 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 애플리케이션 폴더 구조는 다음과 같습니다.

Screenshot of the Windows application folder structure for the 'Simple' Solution in the Visual Studio Solution Explorer.

템플릿의 첫 번째이자 유일한 <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>