COM互操作对象在一个项目中抛出InvalidCastException但在其他项目中不抛出

时间:2009-07-10 10:16:26

标签: c# .net com interop

我在测试C#解决方案中导入了一个COM对象。 一切正常,并继续这样做。

然后我在实际解决方案中导入了相同的COM对象,并作为测试实现了与测试项目中完全相同的行
当我运行真实项目时,我得到一个InvalidCastException

无法将“CTWebReport.WebReportCOMClass”类型的COM对象强制转换为接口类型“CTWebReport.IWebReportCOM”。此操作失败,因为对于具有IID“{5DFA18E8-4E71-4ADC-A812-6B166C242561}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))

我在整个系统中搜索了对interop和com库的每个引用,这包括我能找到的所有bin和obj文件夹。 除了原始的COM库之外,我将它们全部删除了,并且为了更好的措施清理了我的回收站 没有区别,完全相同的情况。测试项目工作,实际项目没有。

修改
似乎COM在winforms应用程序中工作,但不在我的类librar中(由asp.net mvc web应用程序使用)。

我不知道接下来该做什么。建议

2 个答案:

答案 0 :(得分:2)

区别在于线程化。 winform线程从主线程执行代码,而asp.net没有。它是通过在STAThread中显式运行COM来解决的。

答案 1 :(得分:0)

由于您的COM组件在WinForm应用程序中工作但在ASP.NET中没有,我认为您可能会遇到一些权限问题。您是否可以暂时提升运行ASP.NET的权限(例如管理员)并查看您是否可以执行该组件?