다음을 통해 공유


연습: 파트 1-기본 프로젝트 시스템 만들기

Visual Studio 프로젝트 개발자를 사용 하 여 소스 코드 파일 및 기타 에셋을 표시를 구성 하는 컨테이너는 솔루션 탐색기. 프로젝트 구성, 빌드, 디버깅 및 소스 코드를 배포 및 웹 서비스, 데이터베이스 및 기타 리소스에 대 한 참조를 만들 수 있도록 합니다.

일반적으로 프로젝트는.csproj 파일 C# 프로젝트에 대 한 예를 들어, 프로젝트 파일의 내용으로 지정 됩니다. 사용자의 프로젝트 파일 이름 확장명을 가진 고유의 프로젝트 형식을 만들 수 있습니다. 프로젝트 형식에 대 한 자세한 내용은 참조 하십시오. 프로젝트 형식.

이 연습에서는 프로젝트 파일 이름 확장명.myproj가 있는 프로젝트 형식을 만드는 방법을 가르칩니다. 이 연습을 완료 하려면 연습 기존 C# 프로젝트 시스템에서 빌리는 있기 때문에 언어를 직접 만들 필요가 없습니다.

참고

IronPython 샘플 딥 다이브에 전체 언어 프로젝트 시스템의 엔드-투-엔드 샘플을 참조 하십시오. Visual Studio 확장성 샘플.

이 연습에서는 이러한 작업을 수행 하는 방법에 설명 합니다.

  • 기본 프로젝트 형식을 만듭니다.

  • 기본 프로젝트 템플릿을 만듭니다.

  • 프로젝트 템플릿 Visual Studio 등록 합니다.

  • 프로젝트 인스턴스를 열어 만들은 새 프로젝트 대화 상자를 표시 한 다음 서식 파일을 사용 하 여.

  • 프로젝트 시스템에 대 한 프로젝트 팩터리를 만듭니다.

  • 프로젝트 시스템에 대 한 프로젝트 노드를 만듭니다.

  • 프로젝트 시스템에 대 한 사용자 지정 아이콘을 추가 합니다.

  • 기본 템플릿 매개 변수 대체를 구현 합니다.

참고

이 연습 단계에서는 C# 프로젝트를 기반으로 합니다.그러나 파일 이름 확장명 및 코드와 같은 세부 사항을 제외 하 고 동일한 단계 Visual Basic 프로젝트에 대해 사용할 수 있습니다.

사전 요구 사항

이 연습을 완료 하려면 설치 해야 해당 Visual Studio 2010 SDK.

참고

Visual Studio SDK에 대 한 자세한 내용은 참조 하십시오. Visual Studio 개요를 확장합니다..Visual Studio SDK를 다운로드 하는 방법를 참조 하십시오. Visual Studio 확장성 개발자 센터 MSDN 웹 사이트에서.

Visual Studio 패키지 프로젝트 템플릿에 대해 위치

세 가지 다른 위치에서 찾을 수 있습니다 Visual Studio 패키지 프로젝트 서식 파일은 새 프로젝트 대화 상자:

  1. 아래에서 Visual Basic 확장성. 프로젝트의 기본 언어는 Visual Basic입니다.

  2. C#에서 확장 합니다. 프로젝트의 기본 언어는 C#입니다.

  3. 아래에서 기타 프로젝트 형식 확장성. 프로젝트의 기본 언어를 C# 하지만 VB 및 c + +를 사용할 수 있습니다.

기본 프로젝트 형식 만들기

대부분의 Visual Studio 확장을 같은 프로젝트 형식 Vspackages가 구현 됩니다. Vspackages에 대 한 자세한 내용은 Visual Studio Vspackages를 사용 하 여 사용자 지정 연습. 프로젝트 형식을 만들 수 있는 Vspackage를 먼저 만들어야 합니다.

있는 Vspackage를 만들려면

  1. SimpleProject 라는 VSPackage 프로젝트를 만듭니다.

  2. 에 있는 프로그래밍 언어 선택 페이지에서 선택 C#새 어셈블리에 서명 하려면 키 파일을 생성.

  3. 에 있는 테스트 옵션 선택 페이지에서 두 옵션의 선택을 취소 하 고 다음을 클릭 완료.

    템플릿에 지정 된 설정이 있는 VSPackage 프로젝트를 만듭니다.

기본 프로젝트 템플릿 만들기

이제 새.myproj 프로젝트 형식을 구현 하는이 기본적인 Vspackage를 수정할 수 있습니다. .Myproj 프로젝트 유형을 기반으로 하는 프로젝트를 만들려면 Visual Studio 파일, 리소스, 및 새 프로젝트를 추가 하려면 참조를 알 수 있습니다. 이 정보를 제공 하려면 프로젝트 파일을 프로젝트 템플릿 폴더에 넣습니다. 사용자가.myproj 프로젝트 형식에 사용할 때 다음의 새 프로젝트 대화 상자는 프로젝트를 만들려면 파일을 새 프로젝트에 복사 됩니다.

기본 프로젝트 템플릿을 만들려면

  1. 솔루션 탐색기, 마우스 오른쪽 단추로 클릭은 SimpleProject 프로젝트 노드 하 고 추가, 다음을 클릭 하 고 새 폴더. 폴더 이름을 지정 템플릿.

  2. 에 있는 템플릿 폴더 라는 폴더를 추가 프로젝트.

  3. 프로젝트 폴더에 폴더가 추가 SimpleProject.

  4. 마우스 오른쪽 단추로 SimpleProject 폴더를 가리킨 추가를 클릭 하 고 다음을 클릭 새 항목. 라는 아이콘 파일을 추가 SimpleProject.ico. 클릭 추가 아이콘 편집기를 엽니다.

  5. 아이콘을 개성 있게 만들어. 이 아이콘이 표시 됩니다 있는 새 프로젝트 참조에서 대화 상자.

    간단한 프로젝트 아이콘

  6. 아이콘을 저장 하 고 아이콘 편집기를 닫습니다.

  7. 에 있는 SimpleProject 폴더 추가 클래스 명명 된 Program.cs. 클릭 추가 에서 코드 편집기를 엽니다.

  8. 다음 명령줄을 사용 하 여 기존 코드를 대체 합니다.

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace $nameSpace$
    {
        public class $className$
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello VSX!!!");
                Console.ReadKey();
            }
        }
    }
    

참고

프로젝트 서식에서 파일 파일을 새 프로젝트에 복사할 때 프로그래밍 방식으로 수정할 수 있는 템플릿 매개 변수를 포함할 수 있습니다.이 연습에서는 나중에 템플릿 매개 변수에 대 한이 작업을 수행 하는 $ 및 $className$ $ 네임 스페이스를 알 수 있습니다.

  1. 파일을 저장 하 고 코드 편집기를 닫습니다.

  2. 속성 폴더에서 Assemblyinfo.cs를 복사 및 다음 붙여 넣습니다 있는 Projects\SimpleProject 폴더입니다.

  3. 속성 창 설정에서 빌드 작업 에 Assemblyinfo.cs의 없음.

  4. 솔루션 탐색기, 마우스 오른쪽 단추로 클릭은 SimpleProject 폴더를 가리킨 추가, 다음을 클릭 하 고 새 항목. 명명 된 항목은 XML 파일을 추가 SimpleProject.myproj. 클릭 추가 에서 XML 편집기를 엽니다.

    참고

    모든 프로젝트이 종류의 파일 확장명은.myproj입니다.이 변경 하고자 하는 경우 연습에서 언급 한 모든 곳에서 변경 해야 합니다.

  5. 다음 명령줄을 사용 하 여 기존 콘텐츠를 대체 합니다.

    <Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <SchemaVersion>2.0</SchemaVersion>
        <ProjectGuid>{99999999-9999-9999-9999-999999999999}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <RootNamespace>MyRootNamespace</RootNamespace>
        <AssemblyName>MyAssemblyName</AssemblyName>
        <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
        <DebugSymbols>true</DebugSymbols>
        <OutputPath>bin\Debug\</OutputPath>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
        <DebugSymbols>false</DebugSymbols>
        <OutputPath>bin\Release\</OutputPath>
      </PropertyGroup>
      <ItemGroup>
        <Reference Include="mscorlib" />
        <Reference Include="System" />
        <Reference Include="System.Data" />
        <Reference Include="System.Xml" />
      </ItemGroup>
      <ItemGroup>
        <Compile Include="AssemblyInfo.cs">
          <SubType>Code</SubType>
        </Compile>
        <Compile Include="Program.cs">
          <SubType>Code</SubType>
        </Compile>
      </ItemGroup>
      <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    </Project>
    
  6. 파일을 저장 하 고 XML 편집기를 닫습니다.

  7. 속성 창 설정의 빌드 작업 Program.cs, SimpleProject.ico, 및 Simpleproject.myproj을 콘텐츠, 각각 설정 VSIX에 포함 속성을 True.

이 프로젝트 템플릿은 디버그 구성과 릴리스 구성 된 기본 C# 프로젝트를 설명 합니다. 두 개의 소스 파일, AssemblyInfo.cs 및 Program.cs, 및 여러 명의 어셈블리를 프로젝트에 포함 참조 합니다. 프로젝트가 템플릿에서 만들어지는 경우 새 GUID로 ProjectGuid 값 자동으로 바뀝니다.

솔루션 탐색기, 확장 된 템플릿 폴더는 다음과 같이 표시 되어야 합니다.

템플릿

    프로젝트

        SimpleProject

            AssemblyInfo.cs

            Program.cs

            SimpleProject.ico

            SimpleProject.myproj

기초 프로젝트 팩터리 만들기

Visual Studio 프로젝트 서식 파일 폴더의 위치를 알려야 합니다. 이렇게 하려면 있는 Vspackage를 빌드할 때 서식 파일 위치를 시스템 레지스트리에 쓸 수 없도록 프로젝트 팩터리를 구현 하는 VSPackage 클래스에 특성을 추가 합니다. 프로젝트 팩터리 GUID로 식별 되는 기본 프로젝트 팩터리를 만들어야 합니다. 사용의 ProvideProjectFactoryAttribute SimpleProjectPackage 클래스를 프로젝트 공장을 연결 하는 특성입니다.

기초 프로젝트 공장을 만들려면

  1. 코드 편집기에서 guids.cs를 엽니다.

  2. 에 있는 도구 메뉴를 클릭 GUID 만들기.

  3. 프로젝트 공장에 대 한 GUID를 만들거나 다음 예제를 사용 합니다. Guidlist에 GUID를 추가 합니다. GUID Guid 형식 및 문자열 형식에 모두 있어야 합니다. 결과 코드는 다음 예제와 비슷해야 합니다.

    static class GuidList
    {
        public const string guidSimpleProjectPkgString = 
            "96bf4c26-d94e-43bf-a56a-f8500b52bfad";
        public const string guidSimpleProjectCmdSetString = 
            "72c23e1d-f389-410a-b5f1-c938303f1391";
        public const string guidSimpleProjectFactoryString =  
            "471EC4BB-E47E-4229-A789-D1F5F83B52D4";
    
        public static readonly Guid guidSimpleProjectCmdSet = 
            new Guid(guidSimpleProjectCmdSetString);
        public static readonly Guid guidSimpleProjectFactory =  
            new Guid(guidSimpleProjectFactoryString);
    };
    
  4. 파일을 저장 하 고 편집기를 닫습니다.

  5. 솔루션 탐색기, 마우스 오른쪽 단추로 클릭은 SimpleProject 프로젝트 노드 하 고 추가, 다음을 클릭 하 고 새 항목. 추가 된 클래스 라는 SimpleProjectFactory.cs. 클릭 추가 에서 코드 편집기를 엽니다.

  6. 다음 추가 다음 문을 사용 하 여 문을 사용 하 여.

    using System.Runtime.InteropServices;
    
  7. Guid 특성의 SimpleProjectFactory 클래스에 추가 합니다. 특성의 값은 새 프로젝트 공장 GUID입니다.

    [Guid(GuidList.guidSimpleProjectFactoryString)]
    class SimpleProjectFactory
    
  8. 솔루션을 다시 빌드하고 오류 없이 빌드되는지 확인 합니다.

이제 프로젝트 서식 파일을 등록할 수 있습니다.

프로젝트 서식 파일을 등록 하려면

  1. 코드 편집기에서 Simpleprojectpackage.cs를 엽니다.

  2. 추가 ProvideProjectFactoryAttribute SimpleProjectPackage 클래스에 다음과 같은 특성이 있습니다.

    [ProvideProjectFactory( 
        typeof(SimpleProjectFactory),  
        "Simple Project",  
        "Simple Project Files (*.myproj);*.myproj",  
        "myproj", "myproj",  
        @"Templates\Projects\SimpleProject",  
        LanguageVsTemplate = "SimpleProject")]
    [Guid(GuidList.guidSimpleProjectPkgString)]
    public sealed class SimpleProjectPackage : Package
    
  3. 솔루션을 다시 빌드하고 오류 없이 빌드되는지 확인 합니다.

    재구축 프로젝트 서식 파일을 등록합니다.

ProvideProjectFactory 특성 구문을 있습니다.

public ProvideProjectFactoryAttribute(    Type factoryType,    string name,     string displayProjectFileExtensionsResourceID,    string defaultProjectExtension,    string possibleProjectExtensions,    string projectTemplatesDirectory)

매개 변수 defaultProjectExtension 및 possibleProjectExtensions 프로젝트 파일 이름 확장명 (.myproj)으로 설정 됩니다. projectTemplatesDirectory 매개 변수는 템플릿 폴더의 상대 경로를 설정 합니다. 빌드하는 동안이 경로 전체 빌드를 변환 되 고 프로젝트 시스템 등록 하는 레지스트리에 추가 됩니다.

템플릿 등록 검사

빌드하는 동안 Visual Studio 서식 파일을 사용 하는 데 필요한 정보를 포함 하는 SimpleProject.pkgdef 라는 파일을 만듭니다. 이 프로젝트의 \bin\debug 폴더에 숨김된 파일입니다. 이와 유사한 내용이 있는지 확인 하려면 파일을 엽니다.

[$RootKey$\InstalledProducts\SimpleProjectPackage]
@="#110"
"Package"="{f202a1d5-9bf7-424c-a261-d7d2ab364560}"
"PID"="1.0"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\Packages\{f202a1d5-9bf7-424c-a261-d7d2ab364560}]
@="Company.SimpleProject.SimpleProjectPackage, SimpleProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf624da7ef057ca0"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Company.SimpleProject.SimpleProjectPackage"
"CodeBase"="$PackageFolder$\SimpleProject.dll"
[$RootKey$\Menus]
"{f202a1d5-9bf7-424c-a261-d7d2ab364560}"=", Menus.ctmenu, 1"
[$RootKey$\Projects\{471ec4bb-e47e-4229-a789-d1f5f83b52d4}]
@="SimpleProjectFactory"
"DisplayName"="Simple Project"
"DisplayProjectFileExtensions"="Simple Project Files (*.myproj);*.myproj"
"Package"="{f202a1d5-9bf7-424c-a261-d7d2ab364560}"
"DefaultProjectExtension"="myproj"
"PossibleProjectExtensions"="myproj"
"ProjectTemplatesDir"="$PackageFolder$\Templates\Projects\SimpleProject"
"Language(VsTemplate)"="SimpleProject"
[$RootKey$\NewProjectTemplates\TemplateDirs\{f202a1d5-9bf7-424c-a261-d7d2ab364560}\/1]
@="Simple Project"
"SortPriority"=dword:00000064
"TemplatesDir"="$PackageFolder$\Templates\Projects\SimpleProject"

파일에는 guid가 서로 다른 됩니다. 이러한 guid가 guids.cs에서 프로젝트에 대 한 일치 합니다.

서식 파일 등록 테스트

템플릿 등록 Visual Studio 서식 파일 이름 및 아이콘을 표시할 수 있도록 프로젝트 서식 파일 폴더의 위치 Visual Studio 지시를 새 프로젝트 대화 상자.

서식 파일 등록을 테스트 하려면

  1. Visual Studio 실험 Visual Studio 인스턴스를 시작 하려면 F5 키를 누릅니다.

  2. 파일 메뉴를 가리키고 새로, 다음을 클릭 하 고 프로젝트.에 있는 새 프로젝트 대화 상자에서 SimpleProject 프로젝트 형식을 선택 합니다.

    SimpleProject 아이콘 아래에 나타납니다 Visual Studio 설치 되어 있는 템플릿.

  3. Visual Studio 실험 인스턴스를 닫습니다.

이제 프로젝트 팩터리를 등록을 보여 주는 수 있습니다. 그러나 아직 프로젝트를 만들 수 있습니다. 프로젝트 패키지와 프로젝트 공장 함께 만들고 프로젝트를 초기화 합니다.

프로젝트 공장 초기화 하는 중

프로젝트 패키지와 프로젝트 공장 간의 연결을 구현 하려면 이러한 작업을 완료 하십시오.

  • 소스 코드 파일에 대 한 링크를 추가 하는 솔루션에 있는 Microsoft.VisualStudio.Package 프로젝트 프레임 워크입니다. 이 프레임 워크는 확장을 관리 하는 패키지 프레임 워크 (MPF)입니다. 프로젝트 프레임 워크 소스 코드로 제공 됩니다.

  • Microsoft.VisualStudio.Package.ProjectPackage에서 SimpleProjectPackage를 파생시킵니다.

  • 만들기는 SimpleProjectFactory Visual Studio 사용 하 여 등록은 Microsoft.VisualStudio.Package.RegisterProjectFactory 메서드.

  • Microsoft.VisualStudio.Package.ProjectPackage에서 SimpleProjectPackage를 파생시킵니다.

  • 전달 하는 SimpleProjectFactory 생성자에 대 한 참조를에서 SimpleProjectPackage. 이 참조는 나중에 서비스 공급자 사이트를 설정 하는 캐시 됩니다. 서비스에 대 한 자세한 내용은 서비스.

프로젝트 공장 초기화

  1. 솔루션 탐색기, 마우스 오른쪽 단추로 SimpleProject 노드 및 다음 프로젝트 언로드.

  2. 마우스는 SimpleProject 노드 및 다음 편집 SimpleProject.csproj.

  3. 수행 하 여 관리 되는 프로젝트 소스 파일을 찾을 이 링크. 예를 들어, C:\MyLocalFolder\Project 라는 로컬 폴더에 다음이 파일을 복사 합니다.

  4. XML 편집기에서는 다음 추가 ProjectBasePath 요소 뒤의 RegisterWithCodebase 요소입니다. 해당 행을 중단 하지는 ProjectBasePath 요소입니다.

    <RegisterWithCodebase>true</RegisterWithCodebase>
    <ProjectBasePath>C:\MyLocalFolder\Project</ProjectBasePath>
    
  5. 다음 추가 Import 이후에 기존 요소 Import 요소입니다.

    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" />
    <Import Project="$(ProjectBasePath)\ProjectBase.Files" />
    
  6. 프로젝트 파일을 저장 하 고 편집기를 닫습니다.

  7. 마우스는 SimpleProject 노드를 클릭 하 고 프로젝트 다시 로드. 솔루션 탐색기 지금 표시할지는 ProjectBase 폴더입니다.

  8. 마우스는 참조 노드를 및 다음 추가 합니다.NET 참조 합니다.

    • EnvDTE (Visual Studio 설치 경로\Common7\IDE\PublicAssemblies\EnvDTE.dll)

    • Microsoft.VisualStudio.Designer.Interfaces

  9. SimpleProjectPackage.cs 파일에 다음을 추가 using 문 뒤의 기존 using 문입니다.

    using Microsoft.VisualStudio.Package;
    
  10. 파생 되는 SimpleProjectPackage 클래스에서 Microsoft.VisualStudio.Package.ProjectPackage.

    public sealed class SimpleProjectPackage : ProjectPackage
    
  11. 다음 줄을 추가 SimpleProjectPackage.Initialize 메서드를 후에 단지 base.Initialize.

    base.Initialize(); 
    this.RegisterProjectFactory(new SimpleProjectFactory(this));
    
  12. Simpleprojectfactory.cs에 다음을 추가 using 문 뒤의 기존 using 문입니다.

    using Microsoft.VisualStudio.Package;
    
  13. 파생 되는 SimpleProjectFactory 클래스에서 ProjectFactory.

    class SimpleProjectFactory : ProjectFactory
    
  14. 다음 더미 메서드를 추가 SimpleProjectFactory 클래스입니다. 이후 단원에서는이 메서드를 구현 합니다.

    protected override ProjectNode CreateProject() 
    { 
        return null; 
    }
    
  15. 다음 필드 및 생성자에 추가 SimpleProjectFactory 클래스입니다. 이 SimpleProjectPackage 참조를 개인 필드에 캐시 서비스 공급자 사이트 설정 사용할 수 있도록 합니다.

    private SimpleProjectPackage package; 
    
    public SimpleProjectFactory(SimpleProjectPackage package) 
        : base(package) 
    { 
        this.package = package; 
    }
    
  16. 솔루션을 다시 빌드하고 오류 없이 빌드되는지 확인 합니다.

프로젝트 공장 구현 테스트

프로젝트 팩터리 구현에 대 한 생성자를 호출 하는지 여부를 테스트 합니다.

프로젝트 공장 구현을 테스트 하려면

  1. SimpleProjectFactory.cs 파일에 다음 줄에 중단점을 설정에서 SimpleProjectFactory 생성자입니다.

    this.package = package;
    
  2. 실험 Visual Studio 인스턴스를 시작 하려면 F5 키를 누릅니다.

  3. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  4. 에 있는 새 프로젝트 의 SimpleProject 프로젝트 형식을 누른 다음 대화 상자를 선택 확인.중단점에서 실행을 중지합니다.

  5. 중단점을 해제 합니다.

  6. 디버깅 중지 SHIFT + F5 키를 누릅니다.

프로젝트 노드에서 클래스를 확장합니다.

구현 하 여 이제는 SimpleProjectNode 에서 파생 되는 클래스는 ProjectNode 클래스입니다. ProjectNode 기본 클래스의 프로젝트를 만든 다음 작업을 처리 합니다.

  • SimpleProject.myproj, 프로젝트 서식 파일을 새 프로젝트 폴더에 복사합니다. 복사본에는 입력 한 이름에 따라 이름이 변경 되는 새 프로젝트 대화 상자. ProjectGuid 속성 값은 새 GUID로 대체 됩니다.

  • SimpleProject.myproj, 프로젝트 서식 파일의 MSBuild 요소를 검색 하 고 검색에 대 한 Compile 요소입니다. 각 Compile 대상 파일을 새 프로젝트 폴더에 파일을 복사 합니다.

파생 된 SimpleProjectNode 클래스는 이러한 작업을 처리 합니다.

  • 아이콘 파일 및 프로젝트 노드에 사용할 수 있습니다 솔루션 탐색기 만들거나 선택 합니다.

  • 추가 프로젝트 템플릿 매개 변수 대체를를 지정할 수 있습니다.

프로젝트 노드에서 클래스를 확장.

  1. 마우스 오른쪽 단추로 SimpleProject 프로젝트 노드 하 고 추가를 클릭 하 고 다음을 클릭 새 항목. 추가 된 클래스 라는 SimpleProjectNode.cs. 클릭 추가 에서 코드 편집기를 엽니다.

  2. 기존 코드를 다음 코드로 바꿉니다.

    using System;
    using System.Collections.Generic;
    using Microsoft.VisualStudio.Package;
    
    namespace Company.SimpleProject
    {
        public class SimpleProjectNode : ProjectNode
        {
            private SimpleProjectPackage package;
    
            public SimpleProjectNode(SimpleProjectPackage package)
            {
                this.package = package;
            }
            public override Guid ProjectGuid
            {
                get { return GuidList.guidSimpleProjectFactory; }
            }
            public override string ProjectType
            {
                get { return "SimpleProjectType"; }
            }
    
            public override void AddFileFromTemplate(
                string source, string target)
            {
                this.FileTemplateProcessor.UntokenFile(source, target);
                this.FileTemplateProcessor.Reset();
            }
        }
    }
    

이 SimpleProjectNode 클래스 구현을 이러한 재정의 된 메서드가 있습니다.

  • ProjectGuid프로젝트 공장 GUID를 반환 합니다.

  • ProjectType에서 프로젝트 형식의 지역화 된 이름을 반환 합니다.

  • AddFileFromTemplate에서 복사 선택된 된 파일을 서식 파일 폴더에서 대상 프로젝트를 합니다. 이 메서드는 뒷부분에서 더 자세히 구현 됩니다.

SimpleProjectNode 생성자, like는 SimpleProjectFactory 생성자, 캐시는 SimpleProjectPackage 나중에 사용 하기 위해 전용 필드를 참조 합니다.

연결 하는 SimpleProjectFactory 클래스에 SimpleProjectNode 클래스를 사용 해야 인스턴스화할 새 SimpleProjectNode 에 SimpleProjectFactory.CreateProject 메서드 나중에 사용 하기 위해 전용 필드에 캐시 하 고.

프로젝트 팩터리 클래스 및 노드 클래스를 연결 하려면

  1. SimpleProjectFactory.cs 파일에 다음을 추가 using 문 뒤의 기존 using 문입니다.

    using IOleServiceProvider =    Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
    
  2. 대체는 SimpleProjectFactory.CreateProject 메서드에 다음 코드를 사용 하 여.

    protected override ProjectNode CreateProject() 
    { 
        SimpleProjectNode project = new SimpleProjectNode(this.package); 
    
        project.SetSite((IOleServiceProvider)        ((IServiceProvider)this.package).GetService(            typeof(IOleServiceProvider))); 
        return project; 
    }
    
  3. 솔루션을 다시 빌드하고 오류 없이 빌드되는지 확인 합니다.

프로젝트 노드에서 클래스 테스트

테스트 프로젝트 공장 프로젝트 계층 구조를 생성 하는지 여부를 확인 합니다.

프로젝트 노드에서 클래스를 테스트 하려면

  1. 실험 Visual Studio 인스턴스를 시작 하려면 F5 키를 누릅니다.

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  3. 에 있는 새 프로젝트 대화 상자에서 Visual Studio 설치 되어 있는 템플릿, SimpleProject.

  4. 선택 솔루션용 디렉터리 만들기, 및 형식 MyProject 에 있는 이름 상자.

  5. 예를 들어, 솔루션에 대 한 위치를 입력 들어, D:\.

  6. 확인을 클릭합니다.

    프로젝트를 만들려면 프로젝트 공장 Visual Studio 호출 해야 합니다.

  7. Visual Studio 실험 인스턴스를 닫습니다.

사용자 지정 프로젝트 노드 아이콘 추가

프로젝트 노드 아이콘 앞에서 기본 아이콘이입니다. 사용자 지정 아이콘을 변경할 수 있습니다.

사용자 지정 프로젝트 노드에 아이콘을 추가 하려면

  1. 마우스 오른쪽 단추로 클릭은 리소스 폴더를 가리킨 추가, 다음을 클릭 하 고 새 항목. 추가 된 비트맵 파일 SimpleProjectNode.bmp 라는. 클릭 추가 비트맵 편집기를 엽니다.

  2. 속성 windows 비트맵 16 x 16 픽셀로 줄일 수 있습니다. 비트맵을 개성 있게 만들어.

    간단한 프로젝트 명령

  3. 속성 창에서 변경의 빌드 작업 비트맵의 포함 리소스.

  4. Simpleprojectnode.cs에 다음을 추가 using 문 뒤의 기존 using 문입니다.

    using System.Drawing; 
    using System.Windows.Forms;
    
  5. 다음 정적 필드 및 생성자에 추가 SimpleProjectNode 클래스입니다.

    private static ImageList imageList; 
    
    static SimpleProjectNode() 
    { 
        imageList =        Utilities.GetImageList(            typeof(SimpleProjectNode).Assembly.GetManifestResourceStream(                "Company.SimpleProject.Resources.SimpleProjectNode.bmp")); 
    }
    
  6. 시작 부분에 다음과 같은 속성을 추가 SimpleProjectNode 클래스입니다.

    internal static int imageIndex; 
       public override int ImageIndex 
       { 
           get { return imageIndex; } 
       }
    
  7. 인스턴스 생성자에 다음 코드를 사용 하 여 교체 합니다.

    public SimpleProjectNode(SimpleProjectPackage package) 
    { 
        this.package = package; 
    
        imageIndex = this.ImageHandler.ImageList.Images.Count; 
    
        foreach (Image img in imageList.Images) 
        { 
            this.ImageHandler.AddImage(img); 
        } 
    }
    

정적 생성 되는 동안 SimpleProjectNode 프로젝트 노드 비트맵 어셈블리 매니페스트 리소스를 검색 하 고 나중에 사용 하기 위해 전용 필드에 캐시 합니다. 구문을 확인할 수 있는 Assembly.GetManifestResourceStream 이미지 경로. 사용 하는 어셈블리에 포함 된 매니페스트 리소스의 이름을 확인 하는 Assembly.GetManifestResourceNames 메서드. 이 메서드는 적용 경우에 SimpleProject 어셈블리를 검색할 다음과 같은:

  • Company.SimpleProject.Resources.resources

  • Microsoft.VisualStudio.Package.Project.resources

  • Company.SimpleProject.VSPackage.resources

  • Resources.imagelis.bmp

  • Microsoft.VisualStudio.Package.DontShowAgainDialog.resources

  • Microsoft.VisualStudio.Package.SecurityWarningDialog.resources

  • Company.SimpleProject.Resources.SimpleProjectNode.bmp

인스턴스 생성 되는 동안에 ProjectNode 기본 클래스는 자주 사용 되는 포함 된 16 x 16 비트맵 resources\imagelis.bmp에서 resources.imagelis.bmp을 로드 합니다. 이 비트맵 목록에 사용할 수 있습니다 SimpleProjectNode Imagehandler.imagelist로. SimpleProjectNode프로젝트 노드 비트맵을 목록에 추가합니다. 프로젝트 노드 비트맵 이미지 목록의 오프셋 값을 공용으로 나중에 사용 하기 위해 캐시 된 ImageIndex 속성입니다. Visual Studio 프로젝트 노드 아이콘으로 표시 하는 비트맵을 확인 하려면이 속성을 사용 합니다.

사용자 지정 프로젝트 노드 아이콘 테스트

테스트 프로젝트 공장 프로젝트 계층에 사용자 지정 프로젝트 노드 아이콘을 만들지 여부를 확인 합니다.

사용자 지정 프로젝트 노드 아이콘을 테스트 하려면

  1. MyProject 솔루션을 삭제 합니다.

  2. 실험 Visual Studio 인스턴스를 시작 하려면 F5 키를 누릅니다.

  3. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  4. 에 있는 새 프로젝트 대화 상자에서 Visual Studio 설치 되어 있는 템플릿, SimpleProject.

  5. 선택 솔루션용 디렉터리 만들기, 및 형식 MyProject 에 있는 이름 상자.

  6. 예를 들어, 솔루션에 대 한 위치를 입력 들어, D:\.

  7. 확인을 클릭합니다.

    Visual Studio 프로젝트를 만들어야 합니다. SimpleProjectNode.bmp 프로젝트 노드 아이콘으로 사용 되는 것을 확인할 수 있습니다.

    간단한 프로젝트 새 프로젝트 노드

  8. Program.cs에서 코드 편집기를 엽니다. 다음 코드와 비슷한 소스 코드를 표시 되어야 합니다.

    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    
    namespace $nameSpace$ 
    { 
        public class $className$ 
        { 
            static void Main(string[] args) 
            { 
                Console.WriteLine("Hello VSX!!!"); 
                Console.ReadKey(); 
            } 
        } 
    }
    

    네임 스페이스$ $ 및 $className$ 템플릿 매개 변수가 새 값 하지 않아도 됩니다. 다음 섹션에서는 템플릿 매개 변수 대체를 구현할 수 있습니다.

  9. 디버깅 중지 SHIFT + F5 키를 누릅니다.

템플릿 매개 변수 대체

이전 단원에서 프로젝트 템플릿 Visual Studio 사용 하 여 등록은 ProvideProjectFactory 특성입니다. 템플릿 폴더의 경로이 방식으로 등록 하는 중 수 재정의 하 고 확장 하 여 기본 템플릿 매개 변수 대체를 사용 하 여 해당 ProjectNode.AddFileFromTemplate 클래스입니다. 자세한 내용은 새 프로젝트를 생성 합니다: 내부에서 2 부를 참조하십시오.

템플릿 매개 변수 $네임 Program.cs 파일 템플릿의 $className$ 및 $ 값을 바꾸려면 코드에 추가 AddFileFromTemplate 클래스입니다.

템플릿 매개 변수 대체

  1. SimpleProjectPackage.cs 파일에 다음을 추가 using 문 뒤의 기존 using 문입니다.

    using System.IO;
    
  2. 대체는 AddFileFromTemplate 메서드에 다음 코드를 사용 하 여.

    public override void AddFileFromTemplate(
        string source, string target)
    {
        string nameSpace = 
            this.FileTemplateProcessor.GetFileNamespace(target, this);
        string className = Path.GetFileNameWithoutExtension(target);
    
        this.FileTemplateProcessor.AddReplace("$nameSpace$", nameSpace);
        this.FileTemplateProcessor.AddReplace("$className$", className);
    
        this.FileTemplateProcessor.UntokenFile(source, target);
        this.FileTemplateProcessor.Reset();
    }
    
  3. 방법, 중단점을 설정 하 여 바로 뒤에 className 할당 문을.

할당 문은 새 클래스 이름 및 네임 스페이스에 대 한 적절 한 값을 결정합니다. 두 ProjectNode.FileTemplateProcessor.AddReplace 메서드 호출은 해당 템플릿 매개 변수 값이 새 값을 사용 하 여 교체 합니다.

템플릿 매개 변수 대체를 테스트합니다.

프로젝트 공장에 사용자 지정 프로젝트 노드 아이콘을 프로젝트 계층 구조를 만드는 경우 보려면 테스트 하십시오.

템플릿 매개 변수 대체를 테스트 하려면

  1. MyProject 솔루션을 삭제 합니다.

  2. 실험 Visual Studio 인스턴스를 시작 하려면 F5 키를 누릅니다.

  3. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  4. 에 있는 새 프로젝트 대화 상자에서 Visual Studio 설치 되어 있는 템플릿, SimpleProject.

  5. 선택 솔루션용 디렉터리 만들기, 및 형식 MyProject 에 있는 이름 상자.

  6. 예를 들어, 솔루션에 대 한 위치를 입력 들어, D:\.

  7. 확인을 클릭합니다.

    AddFileFromTemplate 메서드의 중단점에서 실행이 중지됩니다.

  8. 값을 검사 하는 nameSpace 및 className 매개 변수.

    • nameSpace<RootNamespace>의 값이 부여 됩니다. \Templates\Projects\SimpleProject\SimpleProject.myproj 프로젝트의 서식 파일 요소입니다. 이 예에서 값은 "MyRootNamespace"입니다.

    • className값 클래스 소스 파일 이름, 파일 이름 확장명 없이 지정 됩니다. 이 경우 첫 번째 파일을 대상 폴더에 복사 하려면 AssemblyInfo.cs입니다. 따라서 값은 클래스 이름 "어셈블리 정보"입니다.

  9. 중단점을 제거 하 고 실행을 계속 하려면 F5 키를 누릅니다.

    Visual Studio 프로젝트 만들기를 완료 해야 합니다.

  10. Program.cs에서 코드 편집기를 엽니다. 다음 코드와 비슷한 소스 코드를 표시 되어야 합니다.

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    
    namespace MyRootNamespace 
    { 
        public class Program 
        { 
            static void Main(string[] args) 
            { 
                Console.WriteLine("Hello VSX!!!"); 
                Console.ReadKey(); 
            } 
        } 
    }
    

    클래스 이름은 이제 "프로그램"입니다. "MyRootNamespace" 네임 스페이스를 이제 수 표시 됩니다.

  11. 실험 모드의 Visual Studio 인스턴스에서 F5 키를 누릅니다. 새 프로젝트 컴파일 해야, 실행 및 "VSX Hello!!!"를 콘솔 창에 표시 됩니다.

    간단한 프로젝트 명령

이로써 관리 되는 기본 프로젝트 시스템을 구현 했습니다.

참고 항목

개념

Visual Studio SDK 내

기타 리소스

Visual Studio Vspackages를 사용 하 여 사용자 지정 연습

VSPackage 브랜딩