我目前正在将VS2010扩展移植到VS2012,我看到当我加载解决方案时,IVsSolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
回调是用fAdded == 1
调用的。我相信这必须归功于VS2012中项目的异步加载。 VS2010不会发生这种情况。
我的问题是,如何在OnAfterOpenProject
中知道它是从异步项目加载过程调用的?
答案 0 :(得分:1)
请查看Microsoft VSX论坛的以下链接: http://social.msdn.microsoft.com/Forums/br/vsx/thread/2d38f312-e566-4f65-bf2a-92041c51d7cc
答案 1 :(得分:0)
(虽然参加派对很晚)从MSDN IVsSolutionEvents.OnAfterOpenProject
引用here开始,行为似乎是正确的,并且文档解释了(至少现在,至少):
fAdded
输入:System.Int32
[in] true 如果在解决方案打开后将项目添加到解决方案中。如果在打开解决方案时将项目添加到解决方案中,则 false 。
从您的报告中,似乎 false (解决方案仍在加载)映射到 1 ,因此我猜 true 将映射到<强> 0 即可。这在某种程度上与VSConstants
:
public const int S_FALSE = 1;
public const int S_OK = 0;
最后,在您的OnAfterOpenProject
实施中,您可以根据fAdded
输入的值过滤调用:如果使用 1 调用,则表示解决方案仍然是(异步)加载,否则意味着新项目已添加到(已加载)解决方案中。