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

某种注册表访问问题,请参阅编辑我的问题。 –