4

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

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

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

4

2 回答 2

7

当然,这就是它的全部意义所在。将您的解决方案导入 VS2010,Project + Properties,Application 选项卡,将 Target Framework 更改为 .NET 4.0。在解决方案资源管理器窗口中打开引用节点,选择 Microsoft.mshtml 引用并将其“嵌入互操作类型”属性设置为 True。对于面向 4.0 的新项目,它会自动打开

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

新的动态关键字与可选和命名参数功能无关,它们只是在使用为使用脚本语言而设计的 COM 服务器时更容易编写更清晰的代码。Mshtml 已经很干净了,Office interop 就是最好的例子。

另请注意,当您利用 Windows 窗体的 HtmlDocument 和 HtmlElement 类时,往往很容易避免依赖于 mshtml。通过使用 WebBrowser.Document 属性开始。然而,它们并不包含所有 mshtml 功能。

于 2010-05-05T12:15:17.357 回答
2

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

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

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

于 2010-05-05T09:27:58.710 回答