2

我正在編寫一個VS擴展,它需要與服務器通信並識別用戶,並且我認爲如果可能,由於此擴展將是連接到服務器的唯一客戶端,使用Visual Studio對Microsoft帳戶的內置支持比實施我自己的帳戶管理基礎結構更有意義。首先,由於Visual Studio開發人員可以使用各種有用的API,人們可能會認爲獲取當前用戶的信息很容易。但是,實際上似乎沒有任何可用於訪問帳戶的明顯API;我檢查了here,並且沒有列出任何相關服務(「配置文件」服務只允許您讀取/寫入爲當前用戶存儲的設置)。從Visual Studio擴展訪問當前的Microsoft帳戶

有誰知道從Visual Studio擴展訪問Microsoft帳戶(相對)簡單的方法嗎?

編輯

我試圖哈迪Brais的建議,並在第一次出現的工作(我成功地檢索到的信息);但是,每次Visual Studio都會在大約30秒後崩潰。我註釋了與註冊表交互的行,並用變量的靜態值替換它們,並且崩潰停止。顯然,訪問Visual Studio的註冊表鍵會導致它崩潰。我甚至嘗試過using語句和其他安全措施,但似乎沒有辦法從擴展中安全地訪問Visual Studio註冊表項。那麼是否有人知道任何官方API可用於檢索此信息而不會崩潰Visual Studio?

+0

我無法重現崩潰。可以指定重現它的詳細步驟嗎?還有什麼是你顯示的錯誤? –

+0

@HadiBrais我有一個Visual Studio擴展,託管一個TCP服務器,並連接到它的一個單獨的控制檯應用程序;都是用C#編寫的,而且爲了調試目的,兩者都在同一臺計算機上運行。控制檯應用程序在連接時從VS的註冊表鍵中檢索當前的Microsoft帳戶,並通過TCP將它們發送到擴展。然後,即使我已經關閉了控制檯應用程序中的RegistryKey對象,VS神祕地崩潰了。我正在調試VS進程,以便測試我的擴展,並且主機VS實例甚至沒有意識到發生了崩潰。 –

回答

1

對於Visual Studio 2015(版本14.0),這是如何獲取有關當前在Visual Studio中登錄的用戶的信息。您需要添加using Microsoft.Win32;

private static string GetUserEmailAddressVS14() 
{ 
    // It's a good practice to request explicit permission from 
    // the user that you want to use his email address and any 
    // other information. This enables the user to be in control 
    // of his/her privacy. 

    // Assuming permission is granted, we obtain the email address. 

    const string SubKey = "Software\\Microsoft\\VSCommon\\ConnectedUser\\IdeUser\\Cache"; 
    const string EmailAddressKeyName = "EmailAddress"; 
    const string UserNameKeyName = "DisplayName"; 

    RegistryKey root = Registry.CurrentUser; 
    RegistryKey sk = root.OpenSubKey(SubKey); 
    if (sk == null) 
    { 
     // The user is currently not signed in. 
     return null; 
    } 
    else 
    { 
     // Get user email address. 
     return (string)sk.GetValue(EmailAddressKeyName); 

     // You can also get user name like this. 
     // return (string)sk.GetValue(UserNameKeyName); 
    } 
} 
+0

謝謝,我會努力的 –

+0

我工作!再次感謝。 –

+0

某種註冊表訪問問題,請參閱編輯我的問題。 –