2017-01-18 5 views
0

을 통해 로컬 작업 영역에서 파일을 잠그는 방법 을 통해 독점 잠금 LockLevel.CheckOut을 통해 단일 파일을 체크 아웃하려고 시도했습니다. 다음 함수는 성공하지만 (오류 없음) TFS의 파일에는 영향을 미치지 않습니다 (체크 아웃되지 않고 잠금이 없음).TFS 2012 API

public static void Lock(string filePath) 
    { 
     var workspace = GetWorkspace(filePath); 
     workspace.PendEdit(new[] {filePath}, RecursionType.None, null, LockLevel.CheckOut); 
    } 

로컬로 TFS 작업 영역과 관련이 있다고 생각합니다. 그러나 Visual Studio 2015는 [Source Control Explorer]->[Right Click Selected File]->[Advanced]->[Lock]을 통해 파일에 대한 잠금을 설정하는 데 문제가없는 것으로 보입니다. 나는 VS가하는 것과는 다른 무엇을하고 있습니까? 내가 놓친 게 있니?

답변

0

많은 시행 착오 후에 나는이 같은 NonFatalError에 대한 이벤트 처리기를 구현 결국 내 독점적 인 체크 아웃과 함께. 이 판명 된 바와 같이, TFS는 다음 오류 자동 실패 하였다

TF400022: The item $/Fake/Server/Path/project.config cannot be locked for checkout in workspace MYWORKSPACE;Dan Lastname. Checkout locks are not supported in local workspaces. 

용액을 LockLevel.CheckinLockLevel.CheckOut에서 LockLevel 변경 하였다. 그 약간 다른 유형의 자물쇠 그러나 나의 필요를 위해 그것의 충분은 잠금 장치 VS 로컬 작업 영역에서 파일을 잠그려고 할 때 사용하는 잠금 유형입니다. 그래서 여기에 모든 차이를 만든 LockLevel의 작은 변화가있는 원래 기능이 있습니다. 아직 TFS에서 파일에 아무것도하지 않는다

public static void Lock(string filePath) 
{ 
    var workspace = GetWorkspace(filePath); 
    workspace.PendEdit(new[] {filePath}, RecursionType.None, null, LockLevel.Checkin); 
} 
0

RecursionType.Full이 아닌 RecursionType.None을 사용해야합니다.

workspace.PendEdit(new[] {filePath}, RecursionType.Full, null, LockLevel.CheckOut); 

PendEdit() 메서드는 지정한 filePath에 대해 체크 아웃/잠긴 파일 수를 반환합니다. RecursionType.Full은 경로의 마지막 자식까지 반복됩니다.

업데이트 : API 프로젝트에이 TFS 누젠트 패키지 (https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/)를 설치하고이 문제가 계속 발생하는지 테스트 해보십시오. 작동하는 경우 어떤 버전의 VS를 사용하든이 문제는 나타나지 않습니다. 이벤트 핸들러가 versionControlServer.NonFatalError += VersionControlServer_NonFatalError;를 통해 versionControlServer 객체에 매여 일단 내가 무슨 일이 있었는지 볼 수 있었다

private static void VersionControlServer_NonFatalError(object sender, ExceptionEventArgs e) 
    { 
     if (e.Failure != null && e.Failure.Severity == SeverityType.Error) 
      throw new ApplicationException("An internal TFS error occurred. See failure message for details:\r\n"+e.Failure.Message); 
    } 

:

+0

- 잠금이 해제 남아 있지 체크 아웃 "INT 수 = workspace.PendEdit를 사용하려고 @Dan – Dan

+0

(RecursionType 설정이 결과에 영향을 미치지 않는다) ([새 ] {filePath}, RecursionType.Full, null, LockLevel.CheckOut); " 카운트가 0이면? "filePath"아래에 파일 항목이 있는지 확인하십시오. filePath는 작업 영역의 로컬 경로입니다. –

+0

개수는 0입니다. filePath가 정확합니다. PendEdit는 오류를보고합니다 (적어도 나는 볼 수 없습니다). – Dan