在C#/ .NET 4.0中新的NoPIA和Type Equivalencefunction是否意味着不再需要Microsoft.mshtml.dll

我正在维护一个基于WPF的应用程序,它包含一个基于WinForms的WebBrowser控件,该控件基于IE Web浏览器控件。 当我们部署时,我们还必须提供Microsoft.mshtml.dll并为ClickOnce发布过程做一些自定义配置,以便让事情发挥作用。

我很好奇,使用C#4.0中新的NoPIA和Type Equivalencefunction以及动态类型function,我们可以期望如果我们升级它,我们可以删除对Microsoft.mshtml.dll程序集的依赖吗? 如果是这样,这不仅会减少我们部署的规模,还会简化我们的发布过程。

我的理解是,我们应该能够将通常自动生成的类型嵌入到COM类型的额外程序集中,例如Visual Studio的MapPoint控件。 我不知道这是否也适用于Microsoft.mshtml.dll ,甚至在最简单的情况下它是如何完成的。 如果有人可以解释这些新function对依赖COM互操作的项目的实际影响,特别是Microsoft.mshtml.dll程序集,那将对我有很大帮助。

当然,这就是它的全部意义所在。 将您的解决方案导入VS2010,Project + Properties,Application选项卡,将Target Framework更改为.NET 4.0。 在Solution Explorer窗口中打开References节点,选择Microsoft.mshtml引用并将其“Embed Interop Type”属性设置为True。 对于以4.0为目标的新项目,它会自动打开

这适用于您在COM选项卡上选择的任何COM类型库以及您在.NET选项卡中选择的任何PIA。 类型库仅在构建时需要,您不必再部署互操作库或PIA。 实际的COM服务器当然必须仍然存在于目标机器上。

新的动态关键字以及可选和命名的参数function不相关,它们只是在使用旨在使用脚本语言的COM服务器时更容易编写更干净的代码。 Mshtml已经相当干净,Office interop就是最好的例子。

另请注意,在利用Windows窗体的HtmlDocument和HtmlElement类时,很容易避免依赖于mshtml。 这是通过使用WebBrowser.Document属性开始的。 但是它们不包含所有mshtmlfunction。

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

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

如果已将MSHTML引用属性中的“嵌入互操作类型”设置设置为“True”。