c# - COM 互操作对象在一个项目中抛出 InvalidCastException,但在其他项目中没有

标签 c# .net com interop

我在测试 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/

相关文章:

c# - 可以更新 POCO 实体中的相关属性(如触发器)吗?

c# - Background Worker 被调用两次

c# - 从 Javascript 调用 C# BHO 方法(仍然不工作)

c# - 无法通过 request.GetResponse() 获取 oauth2 token

c# - ServiceStack、CORS 和 OPTIONS(无 Access-Control-Allow-Origin header )

c# - Asp.NET MVC 和 Azure 存储

c# - 什么相当于 C# 中的 X509EncodedKeySpec

c# - 以编程方式在联机和脱机之间移动 OneDrive 文件

C# 如何获取 COM 接口(interface)的实例

c# - 在多个线程上运行 COM 组件控件