我在测试 C# 解决方案中导入了一个 COM 对象。 一切正常,并将继续如此。
然后我在我的实际解决方案中导入了相同的 COM 对象,并作为测试实现了与测试项目中完全相同的行。
当我运行真实项目时,我得到一个 InvalidCastException
无法将“CTWebReport.WebReportCOMClass”类型的 COM 对象转换为“CTWebReport.IWebReportCOM”接口(interface)类型。此操作失败,因为 IID 为“{5DFA18E8-4E71-4ADC-A812-6B166C242561}”的接口(interface)的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(interface)(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .
我在我的整个系统中搜索了所有对 interop 和 com 库的引用,这包括我能找到的所有 bin 和 obj 文件夹。
除了原始的 COM 库外,我将它们全部删除,并彻底清理了我的回收站。
没有区别,完全一样的情况。测试项目有效,实际项目无效。
编辑
似乎 COM 在 winforms 应用程序中工作,但在我的类库中不起作用(由 asp.net mvc web 应用程序使用)。
我不知道接下来要做什么。有什么建议吗?
最佳答案
区别在于线程。 winform 线程从主线程执行代码,而 asp.net 则没有。通过在 STAThread 中显式运行 COM 解决了这个问题。
关于c# - COM 互操作对象在一个项目中抛出 InvalidCastException,但在其他项目中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108774/