Visual Studio 2017 年迭代 VCFilter 树
Iterating VCFilter tree in Visual Studio 2017
我有一个要移植到 VS2017 的 VS2013 插件,但我发现自己无法以在 2013 年工作正常的方式迭代项目中的过滤器。这是我的代码:
public void OnSolutionLoaded()
{
DTE2 dte = Package.GetGlobalService(typeof(DTE)) as DTE2;
foreach (Project lProject in dte.Solution.Projects)
{
if(lProject.Kind == vcContextGuids.vcContextGuidVCProject)
{
VCProject proj = (VCProject)lProject.Object;
foreach (VCFilter childFilter in (IVCCollection)proj.Filters)
{
RecurseFilters(childFilter);
}
}
}
}
private void RecurseFilters(VCFilter filter)
{
foreach(VCFilter childFilter in (IVCCollection)filter.Filters)
{
RecurseFilters(childFilter);
}
}
如果我在递归中设置断点,尽管我在过滤器中有很多过滤器,但它永远不会命中。发现顶级过滤器很好。
我已经检查了 LSL,但没有打开。我是 运行 VS 15.1.
我做错了什么?
编辑:以上代码按预期工作,直到您添加解决方案文件夹,然后递归不再有效。我认为这是一个错误,因为这与 VS2013
中的行为不同
请检查它是否在顶级过滤器上有子过滤器。像这样:
如果你有上面的过滤器,你可以在递归中打断点。(该演示由 visual studio 2017 版本 15.1 创建)如下所示:
当从缓存加载项目时,VS 15.1 在 vc 过滤器中仍然存在错误(请参阅
https://blogs.msdn.microsoft.com/vcblog/2016/10/05/faster-c-solution-load-with-vs-15/
如何 enable/disable vc 项目缓存)。
该错误将在即将发布的 VS 更新之一(最有可能是 15.3)中修复。
并解释您看到的行为:当解决方案中只有一个项目时不使用项目缓存,但一旦有两个或更多(并且解决方案文件夹算作一个项目),桌面 vc 项目正在使用不同的实现,它从缓存中读取而不是加载 msbuild 项目。
因此,作为目前的解决方法,请将工具 - 选项 - 文本编辑器 - C/C++ - 实验性 - 'Enable Faster Project Load' 设置为 false
我有一个要移植到 VS2017 的 VS2013 插件,但我发现自己无法以在 2013 年工作正常的方式迭代项目中的过滤器。这是我的代码:
public void OnSolutionLoaded()
{
DTE2 dte = Package.GetGlobalService(typeof(DTE)) as DTE2;
foreach (Project lProject in dte.Solution.Projects)
{
if(lProject.Kind == vcContextGuids.vcContextGuidVCProject)
{
VCProject proj = (VCProject)lProject.Object;
foreach (VCFilter childFilter in (IVCCollection)proj.Filters)
{
RecurseFilters(childFilter);
}
}
}
}
private void RecurseFilters(VCFilter filter)
{
foreach(VCFilter childFilter in (IVCCollection)filter.Filters)
{
RecurseFilters(childFilter);
}
}
如果我在递归中设置断点,尽管我在过滤器中有很多过滤器,但它永远不会命中。发现顶级过滤器很好。
我已经检查了 LSL,但没有打开。我是 运行 VS 15.1.
我做错了什么?
编辑:以上代码按预期工作,直到您添加解决方案文件夹,然后递归不再有效。我认为这是一个错误,因为这与 VS2013
中的行为不同请检查它是否在顶级过滤器上有子过滤器。像这样:
如果你有上面的过滤器,你可以在递归中打断点。(该演示由 visual studio 2017 版本 15.1 创建)如下所示:
当从缓存加载项目时,VS 15.1 在 vc 过滤器中仍然存在错误(请参阅 https://blogs.msdn.microsoft.com/vcblog/2016/10/05/faster-c-solution-load-with-vs-15/ 如何 enable/disable vc 项目缓存)。
该错误将在即将发布的 VS 更新之一(最有可能是 15.3)中修复。
并解释您看到的行为:当解决方案中只有一个项目时不使用项目缓存,但一旦有两个或更多(并且解决方案文件夹算作一个项目),桌面 vc 项目正在使用不同的实现,它从缓存中读取而不是加载 msbuild 项目。
因此,作为目前的解决方法,请将工具 - 选项 - 文本编辑器 - C/C++ - 实验性 - 'Enable Faster Project Load' 设置为 false