我有一个.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调用时,我不会出现此问题。有人可以解释发生了什么以及如何解决它吗?
答案 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
希望这对任何偶然发现这个模糊问题的人都有用!