WatiN错误:无法加载程序集

73
我遇到了以下的WatiN错误: 未处理的异常:System.IO.FileLoadException: 无法加载文件或程序集 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db7cfd3acb5ad44e' 或其其中之一的依赖项。所定位的程序集清单定义与程序集引用不符。(HRESULT 异常代码:0x80131040)文件名:'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db'
我将 shDocvw.dll 文件从 System32 复制到 bin 目录,但是问题仍然存在。

4
我使用NuGet安装了MvcContrib.Mvc3.WatiN-ci,但是收到了相同的错误。这是我第一次通过NuGet安装东西...我原本以为这些问题是NuGet应该解决的? - Darragh
3个回答

123
如果你已经在VS2010中使用NuGet安装和引用了WatiN,那么你应该已经拥有正确的引用,因此无需删除和重新添加它们。但是,你仍然需要将Interop.SHDocVw引用的"Embed Interop Types"设置更改为False。

3
谢谢,这个方法对我有用。另外,我还需要按照其他答案中提到的添加[RequiresSTA]。 - ssmith
+1 这对我也解决了问题。(我在VS2010中使用NuGet包)。 - JTech
这对我有用。确保在更改设置后重新构建。 - rsbarro
已经为此奋斗了两天,这就是它。 - Brian

49

更新:此答案是在NuGet发布之前编写的,并且仅适用于您未使用NuGet管理依赖项的情况。如果您使用NuGet,请参见@Nick Jones的答案。

我今天遇到了这个问题。您需要下载最新版本的WatiN(我使用的是2.0.10.928),并引用由WatiN提供的已签名的Interop.SHDocVw.dll。

请尝试以下步骤:

  1. 删除所有其他对Interop.SHDocVw.dll的引用
  2. 右键单击解决方案,选择“清理解决方案”
  3. 引用由WatiN提供的Interop.SHDocVw.dll
  4. 构建解决方案。

希望这可以帮助您。

更新:Nick Jones是正确的。如果您使用NuGet,则不应该出现此问题…但是当我使用MvcContrib.Mvc3.TestHelper-ci时,我也收到了此消息。乍一看,似乎使用'-ci'包是正确的选择,但我决定使用MvcContrib.WatiN软件包有两个原因。

1)我没有收到“无法加载文件或程序集”的错误消息

2) MvcContrib.Mvc3.TestHelper-ci正在使用旧版本的WatiN.Core.dll(1.3.0.4000),而MvcContrib.WatiN包正在使用较新版本(2.0.0.99)


41
此外,当我添加引用时,我需要将“嵌入互操作类型”选项更改为false,并将“复制本地”选项设置为true。 - Darragh
9
在 NUnit 中,我们还需要向我们的测试夹具添加[RequiresSTA]属性。 - Amir
@MoMo 请注意,在您的答案中添加Darragh的评论。将“嵌入互操作类型”更改为false。 - Pomster

32

查看 "Interop.SHDocVw.dll" 引用的属性。 将 "嵌入互操作类型" 更改为 False。

问题在于它没有将 dll 文件复制到您的 bin 文件夹中。但是在进行此设置后,它将正常工作。

我遇到了相同的错误,现在它已经正常工作了。


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