【问题标题】:.net activex not working in framework 4.0.net activex 在框架 4.0 中不起作用
【发布时间】:2012-01-02 14:07:14
【问题描述】:

我有 .net 用户控件,并在 asp.net 页面中将其显示为对象。 如果用户控件的 dll 的目标框架是 3.5 - 一切正常。 如果我将其更改为 .net 4.0 - activex 不可见。

用户控件非常简单。只是一个按钮和一个标签:

[ComVisible(true)]
public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
        label1.Text = "0";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text = Convert.ToInt32(label1.Text) + 1 + "";
    }
}

这是html代码:

<object id="myControl2" name="myControl2"
    classid="http:ClassLibrary1.dll#ClassLibrary1.UserControl1" 
    width="300" height="350" />
</asp:Content>

为什么它不起作用?

【问题讨论】:

  • 客户端是否安装了 .NET 4?
  • 嗨,Yahia。是的,.net 4 已经安装。

标签: c# asp.net .net-4.0 activex


【解决方案1】:

现在默认阻止 IE 中的托管控件(从 v4 或 v4.5 开始)。请参阅“Web 应用程序”下的 MSDN article

幸运的是,使用这些注册键重新启用该功能非常容易:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"EnableIEHosting"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"EnableIEHosting"=dword:00000001

x64 密钥是为我修复它的那个,它使用为 x32 编译的 .Net v3.5 SP1 控件在 Win7 (x64) 上运行 IE8 (x32)。

【讨论】:

  • 谢谢你!我以前在很多机器上都使用过这个,这就是 Caspol,但它突然停止工作,或者很难对我必须支持的每台新的 Windows 7 机器进行故障排除。这适用于 IE 8。最大的问题是您需要为 32x 和 64x 进行所有小配置(仅供参考,Wow6432Noted 是 64x 机器上的 32 位修复)。
【解决方案2】:

.NET 版本 4 不再支持 Windows 窗体控件,并且已删除对它们的支持。

http://msdn.microsoft.com/en-us/library/vstudio/ee941656(v=vs.100).aspx

*Internet Explorer 中的托管控件*
您不能再在 Internet Explorer 中托管 Windows 窗体控件,因为在 Web 上托管控件有更好的解决方案。因此,IEHost.dll 和 IEExec.exe 程序集已从 .NET Framework 中删除。

您可以使用以下技术在 Web 应用程序中进行自定义控件开发:

• 您可以创建 Silverlight 应用程序并将其配置为在浏览器之外运行。有关详细信息,请参阅浏览器外支持。

• 您可以构建 XAML 浏览器应用程序 (XBAP) 以利用 WPF 功能(需要客户端计算机上的 .NET Framework)。有关详细信息,请参阅 WPF XAML 浏览器应用程序概述。

【讨论】:

    【解决方案3】:

    我一直在尝试相同的方法并发现以下内容:

    您不能再在 Internet Explorer 中托管 Windows 窗体控件,因为在 Web 上托管控件有更好的解决方案。因此,IEHost.dll 和 IEExec.exe 程序集已从 .NET Framework 中删除。

    来自这篇文章:http://msdn.microsoft.com/en-us/library/ee941656.aspx

    【讨论】:

      【解决方案4】:

      这可能是应用于已升级到 .NET 4 的程序集的安全规则集的问题。

      使用早期版本的 .NET Framework 编译的程序集具有 1 级透明度。从先前版本升级到 4.0 的程序集默认具有 2 级透明度。您可以明确地将它们设为 1 级。

      尝试将以下内容添加到AssemblyInfo.cs

      using System.Security;
      // ...
      [assembly: SecurityRules(SecurityRuleSet.Level1)]
      

      有关安全规则集的更多信息,请参阅:

      【讨论】:

      • 嗨丹尼斯。感谢您的回答。我试过这个,但它不能解决问题。 .net 3.5 到 .net 4.0 之间还有其他变化吗?
      • 抱歉,想不到别的了。
      猜你喜欢
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多