I have updated our ArcMap extension to work with ArcMap 10 - mainly just change reference from ESRI.ArcGIS.ADF to ESRI.ArcGIS.ADF.Local and set value of 'Specific Version' property for all references to false, and also use the new ESRIRegAsm.exe to register it. So I am wondering now if I can build a single extension that will work with both 9.3.1 and 10.0 or do we need separate binaries for each product?
According to this, you have to recompile:
At ArcGIS 10, ESRI no longer provides policy files. Consequently, all ArcGIS 9.3 and earlier development projects ported to ArcGIS 10 must be recompiled.
I have also found some subtle differences that can have a negative impact. For instance, the tagRECT struct was moved to a different library. This will not cause a problem when you build but can cause issues at runtime as the RCW will try to forward the call to the wrong COM library.
There may be other things hidden in the 10.0 libraries like this so you have to be careful. It may not be an issue if you aren't using an object that has been moved but it does introduce some risk.
Ultimately, you may need to take it on a case-by-case basis. In general, I have found the migration to be fairly painless.