我有一个 C# WPF (.NET 4.0) 应用程序,它使用 Excel 互操作从 Excel 文件中读取数据。
当我在具有 Excel 2007 的开发机器上运行此应用程序时,它运行良好。当我在另一台安装了 Excel 2010 的机器上运行它时,它失败并显示以下错误消息:
System.Runtime.InteropServices.COMException (0x80040154):检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154(REGDB_E_CLASSNOTREG) ))。
尝试创建Microsoft.Office.Interop.Excel.Application
对象时发生故障,如下所示:
var app = new Application();
我的项目有一个参考Microsoft.Office.Interop.Excel.dll
(版本 14.0.0.0,运行时版本 v2.0.50727),它位于:
C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll
我尝试使用引用的 dll 上的默认设置运行应用程序:
- 复制本地 = False
- 嵌入互操作类型 = True
- 特定版本 = True
我还尝试在引用的 dll 上使用以下设置运行应用程序:
- 复制本地 = True
- 嵌入互操作类型 = False
- 特定版本 = True
但是在装有 Office 2010 的机器上,这些尝试都没有奏效。
其他注意事项:装有 Office 2010 的机器是 64 位 w/Windows 7。我的开发机器是装有 Windows XP 的 X86。
问题
是什么导致“类未注册”异常,我该如何解决?
编辑
为了回应 Alex 的回答,我尝试将应用程序构建为 Any CPU、X86 和 X64,但没有任何区别。我仍然收到相同的“类未注册”错误。
编辑 2
刚刚在装有 Office 2010 的 32 位计算机上尝试了该应用程序。没有错误。因此,可能是特定机器出了问题,或者可能是 64 位和 Office 2010 的组合。
编辑 3
好的,现在我已经在另一台装有 Office 2010 的 64 位计算机上对其进行了测试。再次没有错误。我认为这意味着特定机器有问题,这不是我的软件的错。啊编程。