我今天已将我的VS扩展从VS2010迁移到2012,当通过实验配置单元调试扩展时,它似乎为_Config目录创建了一个新的注册表项,每次都有新的编号,例如:
HKCI\Software\Microsoft\VisualStudio\11.0Exp_Config_12944
我假设后者是新devenv.exe实例的进程ID,但它不是。
我有一些需要从此配置目录中读取值的自定义代码,我使用__VSSPROPID.VSSPROPID_VirtualRegistryRoot
来获取注册表根目录:
object property;
_vsShell.GetProperty((int)__VSSPROPID.VSSPROPID_VirtualRegistryRoot, out property);
return property.ToString();
我只是将“_Config”附加到属性值,但现在看来情况已经不是这样了。
是否有一种方法可以阻止VS2012实验配置单元附加该数字,只需使用11.0Exp_Config,或者有没有办法(API,flag)来检索配置注册表根目录?
答案 0 :(得分:3)
感谢上述Hans的评论,我能够使用ILocalRegistry4.GetLocalRegistryRootEx
解决问题,并传入__VsLocalRegistryType.RegType_Configuration
枚举。
//删除之前的代码
编辑:经过进一步调查,似乎有一种更好的方式 - 一个已经执行此操作的类,接受__VsLocalRegistryType
作为参数:VSRegistry
,也方便地返回RegistryKey
:
public RegistryKey ConfigRoot
{
get { return VSRegistry.RegistryRoot(__VsLocalRegistryType.RegType_Configuration); }
}