2

I'm currently porting a VS2010 extension to VS2012 and I've seen that the IVsSolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded) callback is called with fAdded == 1 when I'm loading my solution. I believe this must be due to the asynchronous loading of the projects in VS2012. This doesn't happen with VS2010.

My question is then how can I know in OnAfterOpenProject that it's being called from the asynchronous project loading process?

4

2 に答える 2

1

Microsoft VSX フォーラムから次のリンクを確認して ください。

于 2013-03-01T15:56:57.340 に答える
0

(パーティーには遅れていますが) MSDNIVsSolutionEvents.OnAfterOpenProjectリファレンスhereから、その動作は正しいようであり、ドキュメントはそれを説明しています (少なくとも今では):

f追加

タイプ: System.Int32

[in]ソリューションを開いた後にプロジェクトがソリューションに追加される場合はtrue 。ソリューションが開かれている間にプロジェクトがソリューションに追加される場合はfalse 。

そして、あなたのレポートから、false (ソリューションはまだロード中) が1にマップされているように見えるので、 trueは0にマップされると思います。これは、次の定義とある程度一致していますVSConstants

public const int S_FALSE = 1;
public const int S_OK = 0;

最後に、実装では、その入力OnAfterOpenProjectの値に基づいて呼び出しをフィルタリングできます。 1で呼び出された場合、それはソリューションがまだ (非同期で) ロードされていることを意味し、そうでない場合は、新しいプロジェクトが (既にロードされている) ソリューションに追加されたことを意味します.fAdded

于 2016-01-03T15:58:57.637 に答える