2017-01-31 61 views
0

我有一個單元測試已經通過了所有本地devleoper環境,並且我們的本地構建服務器在大約2年內沒有問題。ClaimTypes.PrimarySid在測試時從身份丟失,但只在某些環境下使用

我現在正在將項目移動到另一個構建 - 包含託管和本地構建代理的在線視覺工作室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私人構建代理服務或交互模式,它只包含http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name。 (Visual Studio中的運行測試正常工作)如果通過MSTest或VSTest.Console.exe運行測試,結果如何? –

回答

0

添加以下代碼在開始澄清PrincipalPolicy使用應該解決您的問題:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
相關問題