通过Excel 2007调用时,Assembly.LoadFrom失败

时间:2011-06-29 19:30:55

标签: excel com .net-4.0 excel-2007 com-interop

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

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

无法加载文件或程序集“Foo ...”或其中一个依赖项。无法加载运行时。 (HRESULT异常:0x80131700)

内部异常是System.Runtime.InteropServices.COMException:无法加载运行时。 (HRESULT异常:0x80131700)

从Excel 2003或Excel 2010或vbscript调用时,我会出现此问题。有人可以解释发生了什么以及如何解决它吗?

1 个答案:

答案 0 :(得分:2)

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

解决方法是在使用.NET 4.0类之前强制Excel使用暴露于COM的.NET 2.0类型。我这样做是通过添加对mscorlib.tlb的.NET 2.0版本的引用,然后在调用.NET 4.0类之前添加以下VBA代码:

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

希望这对任何偶然发现这个模糊问题的人都有用!