无法将“C:\ Windows \ System32 \ shdocvw.dll”添加到我的项目中

我使用的是VS 2010 Ultimate。

我试图通过右键单击引用 – >添加引用… ,然后单击浏览并导航到“C:\ Windows \ System32 \ shdocvw.dll”,将“shdocvw.dll”添加到我的项目引用中,但是当我单击时添加按钮完全没有任何反应。 对话框甚至没有关闭。

知道我能做错什么吗?

我尝试重启VS但仍然遇到这个问题。

在C#解决方案中,如果添加对名为“Microsoft Internet Controls”的COM组件的引用,则应该能够从C#控制台应用程序访问SHDocVw命名空间,而不必执行任何exception操作。

一旦我这样做(在VS 2008中),我就可以使用SHDocVw.ShellWindows,SHDocVw.IWebBrowser2等等。 例如:

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass(); foreach (SHDocVw.IWebBrowser2 ie in shellWindows) { Console.WriteLine("ie.LocationURL: " + ie.LocationURL); if (ie.LocationURL.Contains("foo.com")) ie.Quit(); } 

编辑:当使用VS 2012 / .NET 4.x时,您可以使用下面的方法来解决错误“无法嵌入Interop类型’SHDocVw.ShellWindowsClass’。”

 using SHDocVw; // ... snip ... SHDocVw.ShellWindows shellWindows = new ShellWindows(); foreach (SHDocVw.IWebBrowser2 ie in shellWindows) { Console.WriteLine("ie.LocationURL: " + ie.LocationURL); if (ie.LocationURL.Contains("foo.com")) ie.Quit(); 

有关VS 2012问题的更多信息,请参阅以下答案:

C#如何从IE获取当前URL?

问题是shdocvw.dll不是.NET程序集,它既是普通的Win32 DLL又是ActiveX控件,但不是程序集。 作为C#项目的引用,您可以添加的唯一内容是.NET程序集。

好的,这就引起了一个问题,你为什么要将一个对shdocvw.dll的引用添加到C#项目中? 可能是因为您希望使用Internet Explorer的ActiveX接口在您的应用程序中包含Web浏览器。

如果,那么,如果您正在编写Windows窗体应用程序,则应使用WinForms WebBrowser控件,如果您正在编写WPF应用程序,则应使用WPF WebBrowser控件。 以下是Windows窗体的说明:

  • 如何:将Web浏览器function添加到Windows窗体应用程序

但是如果由于某种原因你想要自己包含控件,而不是使用“canned”版本,那么你需要将它添加到Visual Studio Toolbox中,如下所述:

  • 如何:将ActiveX控件添加到Windows窗体

这是我以前见过的一个不幸的常见请求。

您无法将其添加为参考。 您需要将其添加为工具箱项,将其放入表单中,然后将其作为您的叔叔…

这是一个特点!

完整说明: http : //www.codeproject.com/KB/miscctrl/WebBrowserEx.aspx