I've got 2 monitors, running Vista 64 with ArcGIS 10.0.
I opened arcmap, moved the window to the secondary monitor, undocked several commandbars and saved the mxd, then closed arcmap.
When I reopened arcmap it placed the commandbars where I had placed them (in their undocked state), then prompted me for the mxd. I selected the mxd I had saved and it was presented it on the secondary monitor just as I had saved it. The commandbars remained undocked. It also worked with commandbars undocked on secondary monitor and main window on primary monitor.
I guess if I unplugged the secondary monitor, I'd prefer to have the commandbars stack next time I open arcmap, but I didn't test that.
After doing some research, I found a solution and it's called Assembly Binding Redirection
Basically, for any .net .exe, you can add XML code in the application config file to redirect a referenced assembly from a version number to another.
Esri implemented this in 10.0 and up versions in their EsriRegasm.exe utility. (located here : %commonprogramfiles(x86)%\ArcGIS\bin\esriRegasm.exe or %commonprogramfiles%\ArcGIS\bin\esriRegasm.exe)
If we take a look at 10.1 esriRegasm's configuration file (esriRegasm.exe.config), you see these lines :
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ESRI.ArcGIS.Carto" culture="" publicKeyToken="8fc3cc631e44ad86"/>
<bindingRedirect oldVersion="9.3.0.0-10.0.0.0" newVersion="10.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
It means that they are redirecting all references of ESRI.ArcGIS.Carto from 9.3 to 10.0 to the current assembly (10.1.0.0) so you will avoir errors
In my case, the target version is ArcGIS 9.3.1, and there's no EsriRegasm utility.
I found a solution on microsoft connect site. Add, for each referenced assembly, this xml code to .NET's RegAsm.exe.config file
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ESRI.ArcGIS.Carto" culture="" publicKeyToken="8fc3cc631e44ad86"/>
<bindingRedirect oldVersion="9.3.0.0-10.1.0.0" newVersion="9.3.0.1770"/>
</dependentAssembly>
</assemblyBinding>
As stated in the microsoft connect artcile : You can copy regasm.exe + regasm.exe.config to a separate directory to avoid impacting all regasm invocations on the machine.
The bottom word is yes, it's possible, but the easier solution is probably to build our assemblies on a development machine with 9.3.1 installed.
I hope this helps someone
EDIT:
In order to make it work in ArcMap.exe or ArcCatalog.exe, you have add the same xml code we put on regasm.exe.config in ArcMap or ArcCatalog's config file.
Best Answer
According to this, you have to recompile:
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//0001000002m2000000