WatiN中出现System.IO.FileNotFoundException Interop.SHDocVw的错误

40

当我运行我的WatIn测试时,我刚开始收到以下错误:

System.IO.FileNotFoundException:无法加载文件或程序集“Interop.SHDocVw,Version=1.1.0.0,Culture=neutral,PublicKeyToken=db7cfd3acb5ad44e”或其某个依赖项。系统找不到指定的文件。

我已经在网上搜索并尝试了以下解决方案,但都没有成功:

有人能提供帮助吗?


16
在 Visual Studio 2010 中,如果对 Interop.SHDocVw 的引用设置了“嵌入互操作类型”,则可能会出现此错误。您应该禁用该选项,并确保将“复制本地”选项设置为 True。更多细节请参见 https://dev59.com/a3A65IYBdhLWcg3wyRyk#3636732。 - Greg Bray
2
打开解决方案资源管理器,点击Interop DLL,在属性中将"Embed Interop types"更改为FALSE。 - scott
1
这对我没有用,详见我的问题链接: https://dev59.com/u17Va4cB1Zd3GeqPOOhv - dannyrosalex
7个回答

79

你尝试过这个方法吗:

进入“解决方案资源管理器”,点击Interop dll,在属性中将“嵌入互操作类型”更改为FALSE。

最好使用.Net Studio的NuGet插件,然后通过“添加库包引用”添加对Wattin的引用。


1
我之前手动下载了WatiN并使其正常工作。但是,我刚从NuGet中进行了一次拉取,结果所有东西都停止工作了。根据您的建议,我查看了Interop dll的使用方式,并发现它默认为Embed Interop types to False。显然,WatiN的NuGet安装存在问题,但是您的建议解决了所有问题。 - Bronumski
1
我刚开始使用WatIn。我通过NuGet安装了它,遇到了这个问题。你的修复方法完美解决了我的问题。我猜这只是针对基于.Net 4的测试项目的问题。我相信将互操作类型嵌入主程序集是一个.Net 4的特性。感谢你的帮助! - dariom
我使用了NuGet,但仍然遇到了同样的问题,请参见我的问题; https://dev59.com/u17Va4cB1Zd3GeqPOOhv - dannyrosalex

8

Interop.SHDocVw 和 Microsoft.mshtml dlls 的 Embed Interop Types 属性设置为 False

当然,Visual Studio 会提示您如何修改。


嗨Olanrewaju(欢迎来到StackOverflow!),这个回答不是很清晰。你能再解释一下吗? - Kieren Johnstone
这是我解决问题所做的事情,也可以在此处查看http://bhameyie.com/2011/10/09/watin-annoying-interop-issue/。 - Amr Elgarhy

4

我曾经遇到过这个问题,通过手动将Interop.ShDocVw.dll添加到输出目录中来解决它。


3
我总是不得不重新编译Watin,以便它没有签名,因为我无法使任何建议的解决方案起作用。
您可以在此处获取源代码:http://watin.org/ 在\source\src文件夹中打开该解决方案(有VS2008和VS2010版本),打开两个项目并转到属性->签名,取消选中“签署程序集”,然后构建该解决方案。
您应该在\source\src\Core\bin中获得两个DLL(WatiN.Core.dll和Interop.SHDocVw.dll)-只需将这些复制到您的项目中即可正常工作。

嗨,我下载了代码,打开了VS210 sln,打开了每个项目的属性(核心和单元测试),但在尝试构建时遇到以下错误,请问有什么建议吗?错误1:虽然运行程序集的输出名称为“WatiN.Core.UnitTests, Version=2.0.50.1179, Culture=neutral, PublicKeyToken=null”,但却授予了对“WatiN.Core.UnitTests, PublicKey=BLA”的友元访问权限。请尝试添加一个引用以匹配输出程序集名称“WatiN.Core.UnitTests, PublicKey=BLA”。c:\ Users \ gilbertl \ Downloads \ WatiN-2.0.50.1179(1)\ WatiN-2.0.50.1179-net-2.0 \ source \ src \ Core \ bin \ WatiN.Core.dll - Gilbert Liddell
哦,是的,抱歉,我忘了那个。选择Core项目的“显示所有文件”,然后打开“属性”->“AssemblyInfo.cs”。将该行更改为[assembly: InternalsVisibleTo("WatiN.Core.UnitTests")],然后再试一次。 - Grant Crofton
顺便说一句,如果你能让耶稣的解决方案起作用,我会这样做 - 这有点麻烦,我相信这并不是必要的。 - Grant Crofton
看起来在我构建源代码时,watin.core.dll已经更新了,但是Interop.SHDocVw.dll仍然保持我下载Watin的日期。完整错误信息: System.IO.FileNotFoundException:无法加载文件或程序集“Interop.SHDocVw,Version=1.1.0.0,Culture=neutral,PublicKeyToken=db7cfd3acb5ad44e”或其某个依赖项。系统找不到指定的文件。 - Gilbert Liddell
非常感谢您的帮助。虽然有一些困难需要克服,但最重要的是我的测试已经恢复运行。再次感谢 :-) - Gilbert Liddell
显示剩余3条评论

2

您需要Interop.ShDocVw.dll文件,这个文件应该随着Watin一起提供,如果没有,请将其添加到您的Visual Studio解决方案或与Watin dll文件相同的目录中。如果您已经拥有它,请确保您拥有正确的版本。


嗨,感谢回复。我已经添加了与Watin一起下载的Interop.ShDocVw.dll。我是通过在VS中右键单击引用并添加下载的文件来完成的。 - Gilbert Liddell
1
同样地,在构建时,您可能需要更改解决方案的选项,将引用的DLL复制到bin/debug或bin/release文件夹中,这在我以前遇到过,但在Watin中没有出现这种情况。 - Jesus Ramos

0
如果您正在使用Visual Studio TestTools,您应该设置DeploymentAttribute来解决此问题。
示例:
[DeploymentItem( @"your_path\Interop.SHDocVw.dll" )]
public class WatinTestSuite {

... 

}

0
在我的情况下,我尝试了所有建议的解决方案,但都没有成功。最终我选择以管理员权限关闭并重新打开Visual Studio 2015,然后解决方案成功编译。
希望能对某些人有所帮助。

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