Our product needs to support VS2010 and higher. It's a pretty complex project system based on MPF. To date, we've come across some VS-version-specific interop assemblies that we needed to use and we employed the technique of wrapping those and defining our own VS-version-independent interfaces to access them. We use late binding to dynamically load the proper VS interop assembly based on the currently loaded version of devenv.exe.
What we're finding as we go deeper is that more and more of what we need are VS-version-specific. Certain interfaces that our ProjectNode class (and other MPF classes) need to implement do not exist in Dev10 (and sometimes not Dev11). In these cases, trying to "wrap" everything in our own set of "mirrored" interfaces becomes very tedious. And, in the case of your project system needing to implement a VS-version-specific interface so that the shell can QueryInterface for it, I don't even know how the wrapping technique could work. I suppose we could create our own copies of interop assemblies and copy/paste the guts from the official Microsoft ones, but this also seems "hacky".
So, I'm wondering what other companies have done out there when faced with this. Do people maintain separate copies of their package source code for each VS version? That also seems scarey, considering most of the code would be identical.
All thoughts and comments are very much welcome.
Thanks in advance.
Kirk Fertitta