错误:引用类型声明已定义,但无法找到

Tim*_*sky 41 c# assemblies visual-studio

我有3个项目的解决方案:

  • ParsersBase,定义接口IParseRule
  • ParsersLibrary,它引用了ParsersBase并定义了一个类HtmlImageUrlParseRule:IParseRule
  • ParsersLibraryTest,引用ParsersBase和ParsersLibrary并使用一些测试方法定义测试类

当我试图建立它时,我收到一个警告:

引用类型'AVSoft.ParsersBase.IParseRule'声称它在'c:\ Users\Tim\Dropbox\projects\Image Downloader\ParsersLibrary\bin\Debug\ParsersLibrary.dll'中定义,但无法找到

为什么VS试图AVSoft.ParsersBase.IParseRule在ParsersLibrary.dll中找到?ParsersLibraryTest引用了ParsersBase,它没有任何意义.

小智 14

我遇到了类似的问题.该站点正在运行dll的缓存版本,而不是我已部署到bin目录的版本.我清除了临时的asp.net文件夹内容,这解决了这个问题.


Tim*_*sky 10

这是我的错,我在开始时有一个ParsersLibrary项目,然后将其重命名为ParsersBase,但我没有重命名程序集名称,然后我又添加了一个ParsersLibrary项目.

所以,两个项目具有相同的程序集名称,并不是很好,是吗?:)程序集相互重叠,所以我有这个错误.


Rob*_*rch 10

另一种可能发生的方式是,如果您使用的是几个NuGet软件包,其中一个(可能是中央软件包)已经更新,但还有一些其他功能软件包尚未更新.

通过我最近的例子 - 错误是"引用类型'ConsumerSubscriptionConfigurator <>'声称它在'MassTransit'中定义,但无法找到它".这是因为我们已经将MassTransit从2 更新为3,但我们没有将其他一些可选包(MassTransit.log4netMassTransit.Autofac)更新为相同的版本号.在我们尝试使用另外一个附加功能之前,似乎程序集重定向一直保持一切正常.


Sco*_*tis 10

此错误似乎涵盖了各种情况.在我的情况下,关闭和重新打开Visual Studio是诀窍.重新启动Visual Studio后,我能够按预期构建项目.

  • 沿着这些思路,我简单地构建了解决方案,它带着红色的波浪线消失了。 (2认同)
  • 只需重新启动VS,就解决了多少问题。这是50%的VS问题的最佳答案。 (2认同)

Ale*_* Sh 6

我遇到了类似的问题:引用类型 'Func<>' 声称它是在 'mscorlib' 中定义的,但找不到。问题如下:我的解决方案的目标框架 = 3.5,并且我添加了对 Microsoft.Practices.Prism v 4.0 的引用,它是针对框架 4.0 构建的。

将目标框架更改为 4.0 后,它起作用了


Pan*_*sis 5

看起来现在的事情比以前容易了一些。

正如其他答案基本上已经指出的那样,此错误可能是由于同一 NuGet 包的旧版本中没有某些较新的类型造成的。在生产中,这通常是通过适当的版本控制来管理的,在开发中,您最终可能会在进行更改时重复使用相同的版本号。这就是可能出现此问题的地方。

要解决此问题,您通常可以通过执行以下操作来清除缓存:

  1. 在 Visual Studio 中,转到Tools > NuGet Package Manager > Package Manager Settings.
  2. 在弹出菜单中,导航至NuGet Package Manager > General
  3. 在右侧选项中,单击Clear All NuGet Cache(s)