If you are following closely Brian’s blog or history of TFS in general, you may realized that in VS 2010, for the first time, we are the default source control provider in every Visual Studio (except of Express). This, combined with dogfooding and general drive to speed up IDE, made us to do several perf improvements. Among others we improved our code responsible for project system integration. I will try to describe our improvements and lessons I learned in a few blog posts, since they may be beneficial for all users (today’s blog post), scc provider developers and project developers.
The problem I want to describe today was actually not fixed in VS 2010 (it’s high on my todo list though) and can shave off some time off the solution load. Its symptoms are progress dialog popping up during solution load and “All files are up to date” text in the Output Window.
So what is happening? Basically whenever the project is open, we are collecting list of files it is referencing and we check if they all exist on the disk. If any of those files are gone, we are performing get. The usual cause of this problem is referencing binary files that are created during build or long time forgotten resources files that are not used in the source code. To fix the problem you can manually inspect solution structure, you may also turn on soap tracing to see what files/directories we are requesting. Then remove invalid references. You may also try using registry key described by Tim here. Be aware that the functionality I describe below will not be working when this key is turned on!
Why we are doing this get at all? It is required to handle situation when user does “get” on the project file and its new version is referencing new files. The get invoked by the user will download only project file and trigger its reload. During reload, the code I described above will download new files.
Hope this helps!