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

问题描述 投票:38回答:9

我有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试图在Parsers Library.dll中找到AVSoft.ParsersBase.IParseRule? Parsers Library Test提到了ParsersBase,它没有任何意义。

c# visual-studio assemblies
9个回答
13
投票

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


0
投票

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


10
投票

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

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


10
投票

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

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


10
投票

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


4
投票

我有类似的问题:引用类型'Func <>'声称它在'mscorlib'中定义,但无法找到它。问题是:我的解决方案有Target Framework = 3.5,我添加了一个针对框架4.0构建的Microsoft.Practices.Prism v 4.0的引用。

将目标框架更改为4.0后,它就可以了


2
投票

我今天遇到了这个例外。我的问题是我在我的主机上安装了some.package v2.1,在其他项目中安装了some.package v2.3Update-Package关于v2.3主持项目修复了这个问题。


0
投票

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


0
投票

我尝试了上述所有答案但没有解决我的问题。

最后,我检查了我的最新代码(GIT),然后在不同的位置重新存储了存储库。

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


0
投票

我有类似的问题:引用类型'Func <>'声称它在'mscorlib'中定义,但无法找到它。我有一个由.Net 3.5程序引用的.Net 4的库。将两者升级到4.61之后都有效。

似乎在.Net 3.5中缺少Func<T>,只是升级该示例应用就足够了。

进一步说明:有人在库项目(.Net 4)中添加了一个使用Func<T>参数的签名。但是样本程序(3.5)已经存在并且到目前为止运行良好。但是在重新编译时,依赖项的依赖性发生了冲突。因为mscorelib-3.5已经加载了。所有这些都发生在编译时。

© www.soinside.com 2019 - 2024. All rights reserved.