错误: 定义了对类型声明的引用,但找不到它

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

  • ParsersBase,定义接口 IParseRule
  • ParsersLibrary,它引用 ParsersBase并定义一个类 HtmlImageUrlParseRule : IParseRule
  • ParsersLibraryTest,它具有对 ParsersBaseParsersLibrary的引用,并定义了一个带有一些测试方法的测试类

当我试图构建它时,我会得到一个警告:

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

为什么 VS 试图在 ParsersLibrary.dll中找到 AVSoft.ParsersBase.IParseRuleParsersLibraryTest有一个对 ParsersBase的引用; 它没有任何意义。

93055 次浏览

ParsersLibraryTest 需要引用 ParsersBase。错误的第二部分应该是“您必须添加对程序集‘ ParsersBase... ...’的引用”

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

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

我也有过类似的问题。该站点运行的是 dll 的缓存版本,而不是我部署到 bin 目录的版本。我清除了临时 asp.net 文件夹的内容,这样就解决了问题。

我今天碰到了这个例外。我的情况中的问题是,我在主机中安装了 some.package v2.1,在其他项目中安装了 some.package v2.3。关于 Update-Package主机项目到 v2.3固定的问题。

另一种可能发生这种情况的方式是,如果您正在使用几个 NuGet 包,其中一个(可能是中心)包已经更新,但是一些附加功能包尚未更新。

通过我最近的例子可以看到,错误是“ Reference To type‘ ConsumerSubscriptionConfigurator < >”,声称它是在‘ MassTransport’中定义的,但是找不到它”。这是因为我们将 大众运输公司从2更新到3,但是我们没有将其他一些可选包(MassTransit.log4net大众运输公司,自动工厂)更新到相同的版本号。似乎在我们尝试使用另一个附加特性之前,程序集重定向一直保持一切正常工作。

这个错误似乎涵盖了各种各样的场景。在我的案例中,关闭和重新打开 VisualStudio 是一个诀窍。重新启动 VisualStudio 之后,我就能够按照预期构建项目了。

我也遇到过类似的问题: 参考类型‘ Func < >’声称它是在‘ mscolib’中定义的,但是找不到它。问题在于: 我的解决方案是 Target Framework = 3.5,并添加了对 Microsoft 的引用。练习。Prism v4.0是在框架4.0的基础上构建的。

在将目标框架更改为4.0之后,它工作了

我尝试了以上所有的答案,但没有一个能解决我的问题。

最后,我签入了最新的代码(GIT) ,然后在不同的位置重新克隆了存储库。

不是很理想,但至少问题解决了。

我也有过类似的问题: 类型‘ Func < >’的引用声称它是在‘ mscolib’中定义的,但是找不到它。我有一个。引用的 Net 4。净3.5程序。在升级到4.61之后,它工作了。

看起来 Func<T>在.Net 3.5中丢失了,只需要升级那个示例应用程序就足够了。

有人在库项目中添加了一个签名(。Net 4) ,它使用 Func<T>参数。但是示例程序(3.5)已经存在并且运行良好。但在重新编纂的时候,依赖关系发生了冲突。因为 mscorelb-3.5已经被加载了。所有这些都发生在编译时。

我能够克服这个错误的唯一方法是强制卸载所有相关的 nuget 包,然后重新安装它们。悲哀但是真实。

我已经为这个错误纠结了一段时间,终于解决了它。 这是如何重新生成它和我如何修复它。

问题是: 通过右键单击-> 添加引用-> 浏览(选择)引用包,然后再次添加为 NuGet 包。

解决办法是:

  • 删除添加的引用。
  • 从.csproj 删除已安装的包。
  • 从 NuGet 软件包管理器重新安装所需的软件包。
  • 关闭 VisualStudio 并重新打开它。
  • 清洁工程。
  • 构建项目。

注意: 如果无法删除引用的文件(右键单击时没有删除选项) ,请尝试关闭 Visual Studio 并重新打开它。或者删除或移动被引用的 dll,然后再试一次。

更新/整合软件包没有任何帮助,即使是一个干净的回购和 Visual Studio 的重启也不能解决我的问题。

但重新启动确实解决了问题!

我的情况下,我试图测试一个 WPF 项目与。NET Core (3.1)测试项目,无法引用所需的 WindowsBase.dll。

@ binki 的评论帮助了我;

删除所有.vs、 bin 和 obj 文件夹,然后重新打开项目

对我来说,我选择了不正确的项目,我正在创建一个类库项目,我必须选择“类库(。但是我选择了“类库(。净标准)”

替换相同的代码解决了这个问题。

看起来事情比以前简单多了。

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

为了解决这个问题,您通常可以通过执行以下操作来清除缓存:

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

问题在于: 我的解决方案是 Target Framework = 3.1,并添加了对 Microsoft 的引用。实体框架核心。SqlServer v 2.0,它是基于框架构建的。

我在解决方案中的一个库项目中遇到了这个问题。NET 架构,以。NET 标准。最后,我只是删除了项目引用,并在报告问题的应用程序项目中再次添加了它。奇怪的是,唯一改变的是项目 GUID 从以前的大写切换到小写。