我有一个VS2013插件,我正在移植到VS2017,我发现自己无法以与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中的行为不同
答案 0 :(得分:1)
当从缓存加载项目时,VS 15.1仍然存在vc过滤器中的错误(请参阅 https://blogs.msdn.microsoft.com/vcblog/2016/10/05/faster-c-solution-load-with-vs-15/ 如何启用/禁用vc项目缓存)。
该错误将在即将发布的VS更新之一中修复(最有可能是15.3)。
并解释您看到的行为:当解决方案中只有一个项目时,不使用项目缓存,但只要有两个或更多(并且解决方案文件夹计为项目),桌面vc项目就是使用从缓存中读取的不同实现,而不是加载msbuild项目。
现在作为解决方法,请设置工具 - 选项 - 文本编辑器 - C / C ++ - 实验 - '启用更快的项目加载'为假
答案 1 :(得分:0)