Asssembly.LoadFrom通过Excel 2007调用失败

我有一个.NET 4.0类使用Assembly.LoadFrom来加载一个.NET 3.5混合模式程序集。 当从.NET 4.0应用程序调用此类(在configuration文件中指定useLegacyV2RuntimeActivationPolicy =“true”时),它一切正常。

但是,这个类也是COM可见的,当我从Excel 2007中调用它(同样,Excel.exe.config指定useLegacyV2RuntimeActivationPolicy =“true”)我得到一个FileLoadException:

无法加载文件或程序集'Foo …'或其某个依赖项。 无法加载运行时。 (从HRESULTexception:0x80131700)

内部exception是System.Runtime.InteropServices.COMException:加载运行时失败。 (从HRESULTexception:0x80131700)

从Excel 2003或Excel 2010或vbscript调用时,我不会遇到此问题。 有人可以解释发生了什么,我该如何解决?

我从Microsoft发现这是Excel 2007中的一个已知问题。该问题已在Excel 2010中得到解决,并且该问题在Excel 2007中不会得到解决。

解决方法是强制Excel在使用.NET 4.0类之前使用COM公开的.NET 2.0types。 我通过添加对.NET 2.0版本的mscorlib.tlb的引用,然后在调用.NET 4.0类之前添加以下VBA代码来完成此操作:

Dim o as mscorlib.Object Set o = New mscorlib.Object 

希望这对于那些在这个晦涩难懂的问题中发现的人有用!