소스 제어를 구현하려면 다음을 수행하도록 프로젝트 시스템 또는 편집기를 올바르게 구성해야 합니다.
변경된 상태로 전환할 수 있는 권한 요청
파일을 저장할 수 있는 권한 요청
프로젝트에서 파일을 추가, 제거 또는 이름을 바꿀 수 있는 권한 요청
변경된 상태로 전환할 수 있는 권한 요청
프로젝트 또는 편집기는 IVsQueryEditQuerySave2를 호출하여 변경된(더티) 상태로 전환할 수 있는 권한을 요청해야 합니다. 구현하는 각 편집기 IsDocDataDirty는 환경에서 문서를 변경할 수 있도록 QueryEditFiles를 호출하고 승인을 받아야 하며, 그런 다음 True를 IsDocDataDirty에 다시 반환해야 합니다. 프로젝트는 기본적으로 프로젝트 파일의 편집기이므로 텍스트 편집기가 해당 파일에 대해 수행하는 것처럼 프로젝트 파일에 대해 변경된 상태 추적을 구현하는 것과 동일한 책임이 있습니다. 환경은 솔루션의 변경된 상태를 처리하지만 솔루션이 참조하지만 프로젝트 파일 또는 해당 항목과 같이 저장하지 않는 개체의 변경된 상태를 처리해야 합니다. 일반적으로 프로젝트 또는 편집기에서 항목의 지속성을 관리하는 경우 변경된 상태 추적을 구현해야 합니다.
호출에 IVsQueryEditQuerySave2::QueryEditFiles 대한 응답으로 환경에서 다음을 수행할 수 있습니다.
변경 호출을 거부합니다. 이 경우 편집기 또는 프로젝트는 변경되지 않은(깨끗한) 상태로 유지되어야 합니다.
문서 데이터를 다시 로드해야 함을 나타냅니다. 프로젝트의 경우 환경에서 프로젝트의 데이터를 다시 로드합니다. 편집기는 구현을 사용하여 디스크에서 데이터를 다시 로드해야 합니다. 두 경우 모두 데이터가 다시 로드될 때 프로젝트 또는 편집기에서 컨텍스트가 변경될 수 있습니다.
기존 코드 베이스에 적절한
IVsQueryEditQuerySave2::QueryEditFiles호출을 개조하는 것은 복잡하고 어려운 작업입니다. 따라서 프로젝트 또는 편집기를 만드는 동안 이러한 호출을 통합해야 합니다.
파일 저장 권한 요청
프로젝트 또는 편집기에서 파일을 저장하기 전에 QuerySaveFile 또는 QuerySaveFiles을 호출해야 합니다. 프로젝트 파일의 경우 프로젝트 파일을 저장할 시기를 알고 있는 솔루션에서 이러한 호출을 자동으로 완료합니다. 편집기 구현 IVsPersistDocData2 에서 도우미 함수 SaveDocDataToFile를 사용하지 않는 한 편집기는 이러한 호출을 담당합니다. 편집기가 IVsPersistDocData2을(를) 이러한 방식으로 구현하면, IVsQueryEditQuerySave2::QuerySaveFile 또는 IVsQueryEditQuerySave2::QuerySaveFiles 호출이 자동으로 수행됩니다.
비고
항상 이러한 호출을 선점적으로 만듭니다. 즉, 편집기가 취소를 받을 수 있는 시점에 호출합니다.
프로젝트에서 파일 추가, 제거 또는 이름 바꾸기에 대한 권한 요청
프로젝트가 파일 또는 디렉터리를 추가, 이름 바꾸기 또는 제거하려면 먼저 적절한 IVsTrackProjectDocuments2::OnQuery* 메서드를 호출하여 환경에서 권한을 요청해야 합니다. 사용 권한이 부여되면 프로젝트는 작업을 완료한 다음 적절한 IVsTrackProjectDocuments2::OnAfter* 메서드를 호출하여 작업이 완료되었음을 환경에 알려야 합니다. 프로젝트는 부모 파일뿐만 아니라 모든 파일(예: 특수 파일)에 대한 인터페이스 메서드 IVsTrackProjectDocuments2 를 호출해야 합니다. 파일 호출은 필수이지만 디렉터리 호출은 선택 사항입니다. 프로젝트에 디렉터리 정보가 있는 경우 적절한 IVsTrackProjectDocuments2 메서드를 호출해야 하지만 이 정보가 없는 경우 환경은 디렉터리 정보를 유추합니다.
프로젝트가 열려 있거나 닫을 때의 IVsTrackProjectDocuments2 메서드를 호출하면 안 됩니다. 시작 시 이 정보를 원하는 수신기는 이벤트를 기다렸다가 OnAfterOpenSolution 솔루션을 반복하여 필요한 정보를 찾을 수 있습니다. 종료할 때 이 정보는 필요하지 않습니다.
IVsTrackProjectDocuments2는 SVsTrackProjectDocuments에서 제공됩니다.
각 추가, 이름 바꾸기 및 제거 작업에는 OnQuery* 메서드와 메서드가 있습니다 OnAfter* . 메서드를 OnQuery* 호출하여 파일 또는 디렉터리를 추가, 이름 바꾸기 또는 제거할 수 있는 권한을 요청합니다.
OnAfter* 파일 또는 디렉터리가 추가, 이름 바꾸기 또는 제거되고 프로젝트 상태가 새 상태를 반영한 후 메서드를 호출합니다.