@@ -68,28 +68,31 @@ internal SolutionEvents()
6868 /// <summary>Notifies listening clients that a project has been renamed.</summary>
6969 public event Action < Project ? > ? OnAfterRenameProject ;
7070
71- #if ! VS14
7271 /// <summary>Notifies listening clients that the folder is being closed.</summary>
7372 public event Action < string > ? OnBeforeCloseFolder ;
74-
73+ #if ! VS14
7574 /// <summary>Notifies listening clients that the folder has been closed.</summary>
7675 public event Action < string > ? OnAfterCloseFolder ;
77-
76+ #endif
7877 /// <summary>Notifies listening clients that the folder has been opened.</summary>
7978 public event Action < string > ? OnAfterOpenFolder ;
80- #endif
8179
8280 /// <summary> Fired when the solution load process is fully complete, including all background loading of projects.</summary>
8381 public event Action ? OnAfterBackgroundSolutionLoadComplete ;
8482
85- #region IVsSolutionEvents
83+ #region IVsSolutionEvents
8684 int IVsSolutionEvents . OnAfterOpenProject ( IVsHierarchy pHierarchy , int fAdded )
8785 {
8886 ThreadHelper . ThrowIfNotOnUIThread ( ) ;
8987 if ( OnAfterOpenProject != null )
9088 {
91- Project ? project = SolutionItem . FromHierarchy ( pHierarchy , VSConstants . VSITEMID_ROOT ) as Project ;
92- OnAfterOpenProject ? . Invoke ( project ) ;
89+ SolutionItem ? item = SolutionItem . FromHierarchy ( pHierarchy , VSConstants . VSITEMID_ROOT ) as Project ;
90+ if ( item is Project project )
91+ OnAfterOpenProject ? . Invoke ( project ) ;
92+ #if VS14
93+ else if ( item is SolutionFolder folder && folder. FullPath != null )
94+ OnAfterOpenFolder ? . Invoke ( folder . FullPath ) ;
95+ #endif
9396 }
9497 return VSConstants . S_OK ;
9598 }
@@ -104,8 +107,13 @@ int IVsSolutionEvents.OnBeforeCloseProject(IVsHierarchy pHierarchy, int fRemoved
104107 ThreadHelper . ThrowIfNotOnUIThread ( ) ;
105108 if ( OnBeforeCloseProject != null )
106109 {
107- Project ? project = SolutionItem . FromHierarchy ( pHierarchy , VSConstants . VSITEMID_ROOT ) as Project ;
108- OnBeforeCloseProject ? . Invoke ( project ) ;
110+ SolutionItem ? item = SolutionItem . FromHierarchy ( pHierarchy , VSConstants . VSITEMID_ROOT ) ;
111+ if ( item is Project project )
112+ OnBeforeCloseProject ? . Invoke ( project ) ;
113+ #if VS14
114+ else if ( item is SolutionFolder folder && folder. FullPath != null )
115+ OnBeforeCloseFolder ? . Invoke ( folder . FullPath ) ;
116+ #endif
109117 }
110118 return VSConstants . S_OK ;
111119 }
@@ -115,8 +123,9 @@ int IVsSolutionEvents.OnAfterLoadProject(IVsHierarchy pStubHierarchy, IVsHierarc
115123 ThreadHelper . ThrowIfNotOnUIThread ( ) ;
116124 if ( OnAfterLoadProject != null )
117125 {
118- Project ? project = SolutionItem . FromHierarchy ( pRealHierarchy , VSConstants . VSITEMID_ROOT ) as Project ;
119- OnAfterLoadProject ? . Invoke ( project ) ;
126+ SolutionItem ? item = SolutionItem . FromHierarchy ( pStubHierarchy , VSConstants . VSITEMID_ROOT ) ;
127+ if ( item is Project project )
128+ OnAfterLoadProject ? . Invoke ( project ) ;
120129 }
121130 return VSConstants . S_OK ;
122131 }
@@ -132,8 +141,9 @@ int IVsSolutionEvents.OnBeforeUnloadProject(IVsHierarchy pRealHierarchy, IVsHier
132141
133142 if ( OnBeforeUnloadProject != null )
134143 {
135- Project ? project = SolutionItem . FromHierarchy ( pRealHierarchy , VSConstants . VSITEMID_ROOT ) as Project ;
136- OnBeforeUnloadProject ? . Invoke ( project ) ;
144+ SolutionItem ? item = SolutionItem . FromHierarchy ( pRealHierarchy , VSConstants . VSITEMID_ROOT ) ;
145+ if ( item is Project project )
146+ OnBeforeUnloadProject ? . Invoke ( project ) ;
137147 }
138148 return VSConstants . S_OK ;
139149 }
@@ -173,9 +183,9 @@ int IVsSolutionEvents.OnAfterCloseSolution(object pUnkReserved)
173183 OnAfterCloseSolution ? . Invoke ( ) ;
174184 return VSConstants . S_OK ;
175185 }
176- #endregion
186+ #endregion
177187
178- #region IVsSolutionEvents2
188+ #region IVsSolutionEvents2
179189 int IVsSolutionEvents2 . OnAfterOpenProject ( IVsHierarchy pHierarchy , int fAdded )
180190 {
181191 ThreadHelper . ThrowIfNotOnUIThread ( ) ;
@@ -241,17 +251,18 @@ int IVsSolutionEvents2.OnAfterMergeSolution(object pUnkReserved)
241251 OnAfterMergeSolution ? . Invoke ( ) ;
242252 return VSConstants . S_OK ;
243253 }
244- #endregion
254+ #endregion
245255
246- #region IVsSolutionEvents4
256+ #region IVsSolutionEvents4
247257 int IVsSolutionEvents4 . OnAfterRenameProject ( IVsHierarchy pHierarchy )
248258 {
249259 ThreadHelper . ThrowIfNotOnUIThread ( ) ;
250260
251261 if ( OnAfterRenameProject != null )
252262 {
253- Project ? project = SolutionItem . FromHierarchy ( pHierarchy , VSConstants . VSITEMID_ROOT ) as Project ;
254- OnAfterRenameProject ? . Invoke ( project ) ;
263+ SolutionItem ? item = SolutionItem . FromHierarchy ( pHierarchy , VSConstants . VSITEMID_ROOT ) ;
264+ if ( item is Project project )
265+ OnAfterRenameProject ? . Invoke ( project ) ;
255266 }
256267 return VSConstants . S_OK ;
257268 }
@@ -270,16 +281,16 @@ int IVsSolutionEvents4.OnAfterAsynchOpenProject(IVsHierarchy pHierarchy, int fAd
270281 {
271282 return VSConstants . S_OK ;
272283 }
273- #endregion
284+ #endregion
274285
275- #region IVsSolutionEvents5
286+ #region IVsSolutionEvents5
276287 void IVsSolutionEvents5 . OnBeforeOpenProject ( ref Guid guidProjectID , ref Guid guidProjectType , string pszFileName )
277288 {
278289 OnBeforeOpenProject ? . Invoke ( pszFileName ) ;
279290 }
280- #endregion
291+ #endregion
281292
282- #region IVsSolutionEvents7
293+ #region IVsSolutionEvents7
283294#if ! VS14
284295 void IVsSolutionEvents7 . OnAfterOpenFolder ( string folderPath )
285296 {
@@ -302,9 +313,9 @@ void IVsSolutionEvents7.OnAfterCloseFolder(string folderPath)
302313 void IVsSolutionEvents7 . OnAfterLoadAllDeferredProjects ( )
303314 { }
304315#endif
305- #endregion
316+ #endregion
306317
307- #region IVsSolutionLoadEvents
318+ #region IVsSolutionLoadEvents
308319 int IVsSolutionLoadEvents . OnBeforeOpenSolution ( string solutionFilename )
309320 {
310321 OnBeforeOpenSolution ? . Invoke ( solutionFilename ) ;
@@ -337,6 +348,6 @@ int IVsSolutionLoadEvents.OnAfterBackgroundSolutionLoadComplete()
337348 OnAfterBackgroundSolutionLoadComplete ? . Invoke ( ) ;
338349 return VSConstants . S_OK ;
339350 }
340- #endregion
351+ #endregion
341352 }
342353}
0 commit comments