The assembly * could not be found...

An internal user of VSTO asks:

Why can't we give an error message like "Visual Studio 2005 Tools for Office is not installed" instead of the meaningless ""The assembly * could not be found at or could not be loaded..."?

The meaningless error message occurs because Office 2003 is not really aware of VSTO 2.0 because Office 2003 obviously shipped well before VSTO 2.0.

To get VSTO 2.0 customizations to run, we grandfather it in via the same mechanism that VSTO 1.0 used.

VSTO 1.0 looked at two doc properties: _AssemblyName and _AssemblyLocation. In VSTO 1.0 these are set to what the names indicate--the name of the assembly and the location of the assembly. In VSTO 2.0, we use these properties in a different way because we embed the customization in the document via an invisible ActiveX control. So in VSTO 2.0 the _AssemblyName is set to "*" and _AssemblyLocation is set to a GUID that identifies the invisible ActiveX control so the VSTO 2.0 runtime can find it.

When the VSTO 1.0 loader gets asked to load a VSTO 2.0 customization, it is passed a "*" which tells it to defer to the VSTO 2.0 loader. If the VSTO 2.0 loader is not installed, then the VSTO 1.0 loader fails and Office displays the message "The assembly [_AssemblyName] could not be found or loaded"--but unfortunately the _AssemblyName in this case is "*".

it would be nice to get Office 2003 to be aware of this scenario and display a different error message but it probably doesn't meet the bar for an Office SP.