프로젝트 지속성
지속성은 프로젝트의 주요 디자인 고려 사항입니다. 대부분의 프로젝트는 파일을 나타내는 프로젝트 항목을 사용합니다. Visual Studio는 데이터가 파일 기반이 아닌 프로젝트도 지원합니다. 프로젝트와 프로젝트 파일이 소유한 파일은 모두 유지되어야 합니다. IDE는 자체 또는 프로젝트 항목을 프로젝트에 저장하도록 지시합니다.
프로젝트용 템플릿은 프로젝트 팩터리로 전달됩니다. 템플릿은 특정 프로젝트 형식의 요구 사항에 따라 모든 프로젝트 항목의 초기화를 지원해야 합니다. 이러한 템플릿은 나중에 프로젝트 파일로 저장하고 솔루션을 통해 IDE에서 관리할 수 있습니다. 자세한 내용은 프로젝트 팩터리를 사용하여 프로젝트 인스턴스 만들기 및 솔루션을 참조하세요.
프로젝트 항목은 파일 기반 또는 비파일 기반일 수 있습니다.
파일 기반 항목은 로컬 또는 원격일 수 있습니다. 예를 들어 C#의 웹 프로젝트에서 원격 시스템의 파일에 대한 연결은 로컬로 유지되지만 파일 자체는 원격 시스템에서 유지됩니다.
비파일 기반 항목은 데이터베이스나 리포지토리에 항목을 저장할 수 있습니다.
모델 커밋
프로젝트 항목이 있는 위치를 결정한 후 적절한 커밋 모델을 선택해야 합니다. 예를 들어 로컬 파일이 있는 파일 기반 모델에서는 각 프로젝트를 자율적으로 저장할 수 있습니다. 리포지토리 모델에서 여러 항목을 하나의 트랜잭션에 저장할 수 있습니다. 자세한 내용은 프로젝트 형식 디자인 결정을 참조하세요.
파일 이름 확장명을 결정하기 위해 프로젝트는 개체의 클라이언트가 다른 이름으로 저장 대화 상자를 구현할 수 있도록 하는 정보를 제공하는 IPersistFileFormat 인터페이스를 구현합니다. 즉, 다른 형식으로 저장 드롭다운 목록을 채우고 초기 파일 이름 확장명을 관리합니다.
IDE는 프로젝트에서 프로젝트 항목을 적절하게 유지해야 함을 나타내기 위해 프로젝트의 IPersistFileFormat
인터페이스를 호출합니다. 따라서 개체는 파일 및 형식의 모든 측면을 소유합니다. 여기에는 개체 형식의 이름이 포함됩니다.
항목이 파일이 아닌 경우 IPersistFileFormat
은 여전히 파일 기반 항목이 아닌 항목이 유지되는 방식입니다. Visual Basic 프로젝트의 .vbp 파일 또는 Visual C++ 프로젝트의 .vcproj 파일과 같은 프로젝트 파일도 유지되어야 합니다.
저장 작업의 경우 IDE는 RDT(실행 중인 문서 테이블)를 검사하고 계층 구조는 명령을 IVsPersistHierarchyItem 및 IVsPersistHierarchyItem2 인터페이스에 전달합니다. 항목이 수정되었는지 여부를 확인하기 위해 IsItemDirty 메서드가 구현됩니다. 항목이 있는 경우 수정된 항목을 저장하기 위해 SaveItem 메서드가 구현됩니다.
IVsPersistHierarchyItem2
인터페이스의 메서드는 항목을 다시 로드할 수 있는지 여부를 결정하고 항목이 다시 로드될 수 있는 경우 다시 로드하는 데 사용됩니다. 또한 IgnoreItemFileChanges 메서드를 구현하여 변경된 항목이 저장되지 않고 삭제되도록 할 수 있습니다.