我目前正在将 VS2010 扩展移植到 VS2012,并且我已经看到在加载我的解决方案时IVsSolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
调用了回调。fAdded == 1
我相信这一定是由于VS2012中项目的异步加载。VS2010 不会发生这种情况。
我的问题是我怎么知道OnAfterOpenProject
它是从异步项目加载过程中调用的?
我目前正在将 VS2010 扩展移植到 VS2012,并且我已经看到在加载我的解决方案时IVsSolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
调用了回调。fAdded == 1
我相信这一定是由于VS2012中项目的异步加载。VS2010 不会发生这种情况。
我的问题是我怎么知道OnAfterOpenProject
它是从异步项目加载过程中调用的?
请查看 Microsoft VSX 论坛的以下链接:http: //social.msdn.microsoft.com/Forums/br/vsx/thread/2d38f312-e566-4f65-bf2a-92041c51d7cc
(虽然迟到了)从这里IVsSolutionEvents.OnAfterOpenProject
的 MSDN参考资料来看,行为似乎是正确的,文档解释说(至少到现在为止):
f添加
类型:System.Int32
[在]如果在打开解决方案后将项目添加到解决方案中,则为true 。如果在打开解决方案时将项目添加到解决方案,则返回false 。
从您的报告来看,似乎false(解决方案仍在加载)映射到1,所以我猜true将映射到0。这在某种程度上与中的定义一致VSConstants
:
public const int S_FALSE = 1;
public const int S_OK = 0;
最后,在您的OnAfterOpenProject
实现中,您可以根据该fAdded
输入的值过滤调用:如果使用1调用,则意味着解决方案仍在(异步)加载,否则意味着新项目已添加到(已加载)解决方案.