无法在控制台应用程序中引用dll,但我可以在wpf中引用

本文关键字:引用 我可以 wpf dll 应用程序 控制台 | 更新日期: 2023-09-27 18:20:23

  • 我有一个控制台应用程序和一个wpf应用程序
  • 在这两个应用程序上,我都添加了skype4com.dll引用

  • 代码:SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();

给出一个:InvalidCastExeption声明:

无法强制转换类型为"System"的COM对象__ComObject"到接口类型"SKYPE4COMLib.Skype"。此操作失败,因为对IID为"{B1878BFE-53D3-402E-8C86-190B19AF70D5}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT中的异常:0x80004002(E_NOINTERFACE))。

但是当我在wpf应用程序中运行同一行代码时,我不会出现异常。为什么?


在skype更新之前,我的控制台应用程序运行得很好。我卸载了skype,再次安装它,试图解决问题,但这并没有帮助。

无法在控制台应用程序中引用dll,但我可以在wpf中引用

不要为Console应用程序使用客户端配置文件,请将其设置为完整的.Net版本。

您可以通过进入项目属性->应用程序->目标框架(下拉菜单)->将其设置为.Net Framework 4(如果是您正在运行的.Net版本)

来更改它

经过长时间的尝试,我决定在哪里添加必要的引用和类,使我的wpf应用程序成为控制台应用程序。然后我比较了一下,我注意到如果我加上:

[System.STAThreadAttribute()]

到它工作的主要方法!!!!!

因此,我现在的主要方法应该是:

使用系统;使用System.Collections.Generic;使用System.Linq;使用System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        [System.STAThreadAttribute()]                
        static void Main(string[] args)
        {
            SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();
        }
    }
}

在asp.net上没有一个主要的方法。据我所知不是这样的。所以在asp.net中,我不得不添加等于true的AspCompat属性。

所以我的asp.net aspx页面现在看起来像:

    <%@ Page AspCompat="true" Language="C#" .... etc