2017-01-31 1 views
0

J'ai un test unitaire qui a réussi pour tous les environnements locaux devleoper, et notre serveur de construction local pendant environ 2 ans sans problèmes.ClaimTypes.PrimarySid manquant de l'identité lors des tests, mais uniquement sur certains environnements

Je suis en train de déplacer le projet vers une autre version - Visual Studio TFS en ligne avec des agents de construction hébergés et locaux. Le test échoue uniquement lorsque la génération est exécutée via TFS en ligne et échoue si j'utilise l'agent de construction hébergé ou privé. L'agent de construction privé est enregistré en tant que service s'exécutant sous un compte Windows local. Je pourrais peut-être comprendre qu'il échoue sur le serveur hébergé (peut-être qu'il n'utilise pas de connexion Windows), mais comme il échoue également sur l'agent de construction privé, je suis un peu mystifié.

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) 
); 

Pourquoi ClaimType.PrimarySid manque de l'identité de fil entrant?

+0

Sur la base de mon test (sortie de type toutes les réclamations) avec MSTest.exe, VSTest.Console.exe, Agent de construction privé TFS et VSTS avec service ou mode interactif, il contient juste http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name. (Exécuter le test dans Visual Studio fonctionne bien) Quel est le résultat si vous exécutez le test via MSTest ou VSTest.Console.exe? –

Répondre

0

Ajoutez le code ci-dessous dans le commencer à préciser les PrincipalPolicy à utiliser devrait résoudre votre problème:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);