我正在编写一个VS扩展,它将需要与服务器通信并识别用户,并且我认为,如果可能的话,因为此扩展将是连接到服务器的唯一客户端,所以使用Visual Studio对Microsoft帐户的内置支持可以比实施我自己的帐户管理基础架构更有意义。
首先,由于Visual Studio开发人员可以使用各种有用的API,因此人们可能会认为获取当前用户的信息会很容易。但是,实际上似乎没有任何明显的API可用于访问帐户。我在这里检查,没有列出任何相关服务(“个人资料”服务仅允许您读取/写入为当前用户存储的设置)。
有谁知道(相对)简单的方法来从Visual Studio扩展访问Microsoft帐户吗?
编辑
我尝试了哈迪·布雷斯(Hadi Brais)的建议,但起初似乎很奏效(我成功检索到了信息);但是,每次Visual Studio之后都会崩溃30秒。我注释掉了与注册表交互的行,并用变量的静态值替换了它们,然后崩溃停止了。显然,访问Visual Studio的注册表项导致崩溃。我什至尝试了using语句和其他保护措施,但是似乎没有一种方法可以从扩展中安全地访问Visual Studio注册表项。那么,有谁知道在不崩溃Visual Studio的情况下可用于检索此信息的任何正式API?
c# visual-studio visual-studio-extensions microsoft-account visual-studio-2015
我在C++标头中创建了一个带有以下签名的方法:
template<class _Ty>
class x {
public:
// ...
template<class func_Ty>
x *where(func_Ty &);
}
Run Code Online (Sandbox Code Playgroud)
我的代码期望func_Ty可以被调用(即函数指针,λ,或类重载operator()),采用类型的单个参数_Ty或_Ty &,并返回一个bool或bool &.我用这段代码调用函数(s是x<int> *):
s->where([](int i){ return i % 2 == 0;});
Run Code Online (Sandbox Code Playgroud)
这在MSVC上编译很好,但是GCC给了我一个错误:
no matching function for call to ‘x<int>::where(main()::__lambda0)’
Run Code Online (Sandbox Code Playgroud)
如果我*在lambda前添加一个,GCC编译得很好,但是MSVC给了我一个错误:
error C2100: illegal indirection
Run Code Online (Sandbox Code Playgroud)
这是其中一个编译器中的错误吗?或者这些解决方案都可能是非标准的?无论哪种方式,是否有一些方法可以使相同的代码在两个编译器上工作?
我正在尝试创建一个 Visual Studio VSIX 扩展,并且在使用同一解决方案中的 C# 类库的 3 个“依赖项”进行编译时遇到了一个问题:
错误 MSB4057:项目中不存在目标“VSIXContainerProjectOutputGroup”。
错误 MSB4057:项目中不存在目标“VSIXContainerProjectOutputGroup”。
错误 MSB4057:项目中不存在目标“VSIXContainerProjectOutputGroup”。
所有三个程序集都设置为“嵌入此 VSIX”,嵌入文件夹设置为“/”;这是“source.extension.vsixmanifest”文件中的 XML:
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="4.6" d:InstallSource="Download" />
<Dependency d:Source="Project" d:ProjectName="Networking" d:InstallSource="Embed" Version="0.5" Location="|Networking;VSIXContainerProjectOutputGroup|" DisplayName="|Networking;VSIXNameProjectOutputGroup|" Id="|Networking;VSIXIdentifierProjectOutputGroup|" d:VsixSubPath="/" />
<Dependency d:Source="Project" d:ProjectName="Utilities" d:InstallSource="Embed" Location="|Utilities;VSIXContainerProjectOutputGroup|" DisplayName="|Utilities;VSIXNameProjectOutputGroup|" Id="|Utilities;VSIXIdentifierProjectOutputGroup|" d:VsixSubPath="/" />
<Dependency d:Source="Project" d:ProjectName="Data Model" Version="1.0" d:InstallSource="Embed" d:VsixSubPath="/" Location="|Data Model;VSIXContainerProjectOutputGroup|" DisplayName="|Data Model;VSIXNameProjectOutputGroup|" Id="|Data Model;VSIXIdentifierProjectOutputGroup|" />
</Dependencies>
Run Code Online (Sandbox Code Playgroud)
此代码需要位于单独的程序集中,以便其他项目可以引用它。
我已经尝试了这个MSDN 论坛问题中提到的两个建议,但都没有奏效。
还有另一个不太麻烦但可能相关的问题正在发生:每隔一段时间,这三个项目中的类和命名空间似乎都消失了,我必须删除并重新添加对它们的引用。
任何解决这些问题的帮助将不胜感激;如果我可以提供任何其他信息来帮助解决这些问题,请告诉我。
编辑
我尝试在 Release 模式下重新编译以查看它是否是特定于配置的问题,但没有任何改变。