2017-01-31 1 views
0

모든 로컬 devleoper 환경에 대해 전달 된 유닛 테스트와 약 2 년간 로컬 빌드 서버에 문제가 없습니다.ClaimTypes.PrimarySid가 테스트 할 때 Identity에서 누락되었습니다. 일부 환경에서만 사용됩니다.

이제 저는 프로젝트를 호스팅 및 로컬 빌드 에이전트와 함께 다른 빌드 - 비주얼 스튜디오 tfs 온라인으로 옮깁니다. 빌드가 TFS 온라인을 통해 실행되고 호스트 또는 개인 빌드 에이전트를 사용하는지 여부에 관계없이 테스트가 실패합니다. 개인 빌드 에이전트는 로컬 Windows 계정으로 실행되는 서비스로 등록됩니다.

호스트 된 서버 (아마도 Windows 로그인을 사용하지 않는 서버)에서는 실패 할 수도 있지만 개인 빌드 에이전트에서 실패하기 때문에 약간 신비가납니다.

var incomingIdentity = new ClaimsIdentity(Thread.CurrentPrincipal.Identity); 

incomingIdentity.AddClaim(
    new Claim(ClaimTypes.NameIdentifier, 
    ((ClaimsIdentity)Thread.CurrentPrincipal.Identity) 
    .FindAll(ClaimTypes.PrimarySid) 
    .Single() //Exception: Sequence contains no elements 
    .Value) 
); 

왜 들어오는 스레드 신원에서 ClaimType.PrimarySid이 누락 되었습니까?

+0

, 서비스 또는 대화 형 모드를 사용하는 TFS 및 VSTS 전용 빌드 에이전트는 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name을 포함합니다. (Visual Studio에서 실행 테스트가 잘 작동합니다.) MSTest 또는 VSTest.Console.exe를 통해 테스트를 실행하면 어떻게됩니까? –

답변

0

이 PrincipalPolicy이 문제를 해결해야 사용할 명확히하기 위해 시작에 아래의 코드를 추가 MSTest.exe, VSTest.Console.exe 내 시험 (출력 모든 주장 '형)을 바탕으로

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
관련 문제