使用.NET 4.0在IE中加载.NET用户控件

5
我有一个遗留应用程序,其中有一个UserControl作为activex在IE中加载的网页中使用。在.NET 4.0之前,有安全策略和MMC控制台用于创建代码组等。似乎所有这些都在.NET 4.0中消失了。
我想知道是否有人能给我一些线索,告诉我如何更新我的UserControl项目,以便它适用于.NET 4.0。我已经运行了一些测试,但似乎没有任何效果。事实上,我注意到,如果我在编译之前将我的UserControl的.NET版本更新到4.0,它甚至不会被添加到GAC下载区域。它被下载了(使用Fiddler进行了测试),但它根本没有被添加到GAC的下载区域。将.NET平台版本设置为3.5或更低版本,意味着dll被添加到GAC,但仍然无法从网页中使用(之前有效的旧JS代码仍然说找不到对象Y上的成员X)。
那么,有人能指点我正确的方向吗?在.NET 4.0中,我需要做什么才能在Internet Explorer中加载.NET UserControl?
谢谢。

顺便提一下,你知道4.0程序集有一个新的GAC吗? - user1228
只有一个细节:用户控件仍然可以加载,但它们需要针对3.5进行编译,因为IEhost已被微软弃用。有了这些信息,我能够构建一个简单的项目,现在我将尝试使其工作。 - Luis Abreu
是的,但还不确定如何请求权限...例如,如何配置组件以便它可以继续使用互操作来将某些内容打印到打印机上? - Luis Abreu
2个回答

10

自 IE 版本 4 或 4.5 起,默认情况下已禁用 IE 中的托管控件。请参阅“Web 应用程序”下的 MSDN 文章

幸运的是,使用以下注册表键很容易重新启用该功能:

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密钥解决了问题,我在Win7(x64)上运行IE8(x32),使用为x32编译的.NET v3.5 SP1控件。


0

好的,在进行了几次测试后,我已经成功让它工作起来了。以下是一些你应该记住的事情:

  • 你不能将你的程序集编译成 .NET 4.0,因为 IEHost 在 .NET 4.0 中被弃用了。所以,你需要编译成 .NET 3.5
  • 既然你要编译成 .NET 3.5,不要忘记在 .NET 2.0 配置控制台中设置正确的安全策略

而且,最重要的一点是:不要忘记在正确版本的 .NET 中设置策略。在我的情况下,我正在运行 x64 机器,所以我安装了 x64 版本。在已安装的控制台中设置正确的策略并没有真正起作用,所以我不得不下载并安装 x86 版本。做完这些之后,一切都开始正常工作了(毕竟,IE 是作为 32 位应用程序运行的)

再一次,我确实无法理解微软弃用 IEHost 却没有引入新选项的决定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接