2009-09-22 91 views
73

我收到以下错误华廷:华廷错误无法加载组件

Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl y 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db7cfd3acb5 ad44e' or one of its dependencies. The located assembly's manifest definition do es not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db

我复制从System32下的shdocvw.dll中的bin目录,但它仍然是给我同样的问题。

+4

我使用NuGet安装了MvcContrib.Mvc3.WatiN-ci,并且收到了同样的错误。这是我第一次决定通过NuGet安装...我认为这些问题是NuGet应该解决的问题吗? – Darragh 2011-03-15 00:30:25

回答

49

更新:此答案是在Nuget发布之前编写的,仅适用于您不使用Nuget来管理依赖关系的情况。如果您使用的是Nuget,请参阅@Nick Jones的答案

我今天刚刚遇到此问题。您需要下载最新版本的WatiN(我正在使用2.0.10.928)并引用由WatiN提供的签名的Interop.SHDocVw.dll。

尝试follwoing:

  1. 删除所有其他引用Interop.SHDocVw.dll
  2. 右键点击你的解决方案,然后选择“清洁解决方案”
  3. 参考的Interop.SHDocVw.dll规定,通过WatiN
  4. 构建您的解决方案。

希望这会有所帮助。

更新:尼克琼斯是正确的。这应该不是一个问题,如果您使用NuGet ....但我也收到此消息时使用MvcContrib.Mvc3.TestHelper-ci。乍一看,它seems like the '-ci' packages is the way to go,但我决定使用MvcContrib.WatiN包有两个原因。

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

2)MvcContrib.Mvc3.TestHelper-CI是WatiN.Core.dll的using an old version(1.3.0.4000)其中因为MvcContrib.WatiN软件包使用更新版本(2.0.0.99)

+41

此外,当我添加引用时,必须将Embed Interop Types的选项更改为false,并将Copy Local选项设置为true。 – Darragh 2011-03-15 00:53:57

+9

在NUnit中,我们还必须将[RequiresSTA]属性添加到我们的testfixture。 – Amir 2011-04-20 15:27:28

+0

@MoMo请不要将Darragh评论添加到您的答案中。 更改嵌入Interop类型为false – Pomster 2016-04-06 13:57:38

118

如果您已经在VS2010中使用NuGet安装并引用了WatiN,那么您应该已经拥有了正确的引用,所以它们不需要被移除并重新添加。但是您仍然需要在Interop.SHDocVw引用上将“嵌入Interop类型”设置更改为False。

+3

谢谢,这为我解决了它。我还必须添加[RequiresSTA],如其他答案中所述。 – ssmith 2011-06-23 19:12:01

+0

+1这也解决了我的问题。 (我在VS2010中使用NuGet包)。 – JTech 2012-11-09 14:57:13

+1

这也适用于VS2012。 – racingcow 2013-01-21 21:00:00

29

检出引用“Interop.SHDocVw.dll”的属性。将“嵌入互操作类型”更改为False。

问题是,它不是复制bin文件夹中的dll文件。但是在这个设置之后,它会正确地做到这一点。

我有同样的错误,现在它的工作正常。

+0

谢谢,我手动复制到bin \ Debug ..现在它工作 – 2017-04-03 14:27:24