我有一个使用Excel互操作性从Excel文件中读取数据的C#WPF(.NET 4.0)应用程序。
当我在开发机器上运行此应用程序时(具有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的默认设置运行应用程序:
- Copy Local = False
- Embed Interop Types = True
- Specific Version = True
我还尝试使用以下设置在已引用的dll上运行应用程序:
- Copy Local = True
- Embed Interop Types = False
- Specific Version = True
但在安装了Office 2010的计算机上,这些尝试都没有成功。
其他注意事项:安装了Windows 7的64位机器上安装了Office 2010。我的开发机器是带有Windows XP的X86。
问题
是什么导致了“类未注册”异常,如何解决?
编辑
响应Alex的答案,我尝试将应用程序构建为Any CPU、X86和X64,但结果并没有改变。我仍然收到相同的“类未注册”错误。
编辑2
刚刚在安装了Office 2010的32位机器上尝试了该应用程序。没有错误。因此,这可能是特定计算机出了问题,或者是64位和Office 2010的组合出了问题。
编辑3
好吧,现在我已经在另一台安装了Office 2010的64位计算机上测试过了。同样没有错误。我认为这意味着有些东西出了问题,并且这不是我的软件的错。啊,编程。