C#/.NET 4.0中的新NoPIA和类型等效性功能是否意味着不再需要Microsoft.mshtml.dll?

4

我正在维护一个基于WPF的应用程序,其中包含一个基于WinForms的WebBrowser控件,该控件基于IE Web浏览器控件。当我们部署时,我们不得不提供Microsoft.mshtml.dll并进行一些自定义配置以便于我们的ClickOnce发布过程,以使事情正常工作。

我很好奇,使用C# 4.0中的新NoPIAType Equivalence功能以及dynamic类型功能,如果我们升级,是否可以期望我们可以删除对Microsoft.mshtml.dll程序集的依赖?如果是这样,这不仅会大大减少我们的部署大小,还会简化我们的发布过程。

据我了解,我们应该能够将通常自动生成的类型嵌入到额外的程序集中,以便通过 Visual Studio 对 COM 类型(如 MapPoint 控件)进行调用。我不知道这是否也适用于 Microsoft.mshtml.dll,甚至在最简单的情况下如何完成。如果有人能够解释这些新功能对依赖 COM 互操作性和特别是 Microsoft.mshtml.dll 程序集的项目的实际影响,那对我来说将是非常有帮助的。


在MSDN上是否有任何文档可以解释如何使用NoPIA来避免使用PIAs?这个功能出现五年后,我们仍然需要安装PIAs。如果有一种不需要PIAs的方法,那将是很好的。 - Ian Boyd
2个回答

7
当然,这就是全部内容。将您的解决方案导入VS2010,打开“项目+属性”窗口,选择应用程序选项卡,将目标框架更改为.NET 4.0。在“解决方案资源管理器”窗口中打开“引用”节点,选择Microsoft.mshtml引用并将其“嵌入互操作类型”属性设置为True。对于针对4.0新项目,它会自动打开。
这适用于您在COM选项卡上选择的任何COM类型库以及您在.NET选项卡中选择的任何PIA。类型库仅在构建时需要,您不必再部署互操作库或PIA。当然,实际的COM服务器仍必须存在于目标计算机上。
新的dynamic关键字和可选的命名参数功能并不相关,它们只是使编写与设计用于脚本语言的COM服务器的代码更加简洁。Mshtml已经非常干净,Office互操作是最好的例子。
此外,请注意,当您利用Windows Forms的HtmlDocument和HtmlElement类时,往往很容易避免依赖于mshtml。通过使用WebBrowser.Document属性启动该过程。但是,它们无法包装所有mshtml功能。

感谢您对Windows Forms的HtmlDocument和HtmlElement类增加的详细说明。这可能会帮助其他查看此帖子的人。我相信在我们的情况下,我们需要访问一些更为晦涩的事件和属性,但不幸的是这些类型并没有公开。 - jpierson
将此标志切换为true,针对Microsoft.mshtml.dll,导致我的Visual Studio .NET 2012在杀死进程之前停顿了约10分钟。这个DLL似乎太大了,无法处理。 - Uwe Keim

2

如果我们升级到C# 4.0,能否期望我们可以删除对Microsoft.mshtml.dll程序集的依赖?

构建程序集时仍需要此依赖项,但在运行时不需要它(并且VS不会将其复制到输出目录)。

前提是您已将对MSHTML引用的“嵌入互操作类型”设置为“True”。


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