2017-01-31 7 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

на основе моего теста (типа выхода всех претензий) с MSTest.exe, VSTest.Console.exe, TFS и VSTS private service агент с сервисным или интерактивным режимом, он просто содержит http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name. (Тест запуска в Visual Studio отлично работает). Каков результат, если вы запускаете тест через MSTest или VSTest.Console.exe? –

ответ

0

Добавьте приведенный ниже код в начинаете выяснить, какое PrincipalPolicy использовать следует устранить проблему:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);