自定义ActiveX.NET控件在WinForms/WPF项目中无法识别

自定义ActiveX.NET控件在WinForms/WPF项目中无法识别,.net,com,activex,.net,Com,Activex,我正在.NET中创建一个ActiveX控件库(.dll),以便在Internet Explorer中使用。它实现了IObjectSafety,看起来与此类似: namespace ActiveXControl { [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("ABA9D4C3-8166-440C-90C8-2FA6CD4C3C77")] interface I

我正在.NET中创建一个ActiveX控件库(.dll),以便在Internet Explorer中使用。它实现了
IObjectSafety
,看起来与此类似:

namespace ActiveXControl
{
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("ABA9D4C3-8166-440C-90C8-2FA6CD4C3C77")]
    interface ITestControl
    {
        string GetText();
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [Guid("0B3C1BB4-ED2C-4336-9E4C-72A908E74F51")]
    [ProgId("ActiveXControl.TestControl")]
    [ComDefaultInterface(typeof(ITestControl))]
    public class TestControl : UserControl, ITestControl, IObjectSafety
    {
        #region ITestControl

        public string GetText()
        {
            return "Foo";
        }

        #endregion

        #region IObjectSafety

        public enum ObjectSafetyOptions
        {
            INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001,
            INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002,
            INTERFACE_USES_DISPEX = 0x00000004,
            INTERFACE_USES_SECURITY_MANAGER = 0x00000008
        };

        public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
        {
            ObjectSafetyOptions m_options = ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA;
            pdwSupportedOptions = (int)m_options;
            pdwEnabledOptions = (int)m_options;
            return 0;
        }

        public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
        {
            return 0;
        }

        #endregion
    }
}
当我用它创建一个.cab并在IE中运行它时,它工作了。但是,当我创建一个常规的WPF桌面应用程序并引用程序集时,我遇到了一个不寻常的情况:当我第一次添加引用(或进行清理)时,
ActiveXControl
命名空间和控件在Visual Studio中显示为可识别的。我一构建,就得到了这样的信息:

找不到命名空间名称“ActiveXControl”的类型(是 是否缺少using指令或程序集引用?)


我尝试过重建控件和一些变体,包括WinForms项目。有人能解释一下为什么会发生这种情况,以及我能做些什么来修复它吗?

解决方案是进入项目属性,将目标框架从“.NET Framework 4客户端配置文件”更改为“.NET Framework 4”。然后,它构建/运行良好。

我的项目设置的可能副本有点不同,但解决方案为我修复了它。谢谢