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

时间:2013-10-19 18:14:56

标签: c# visual-studio assemblies

我有一个包含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试图在ParsersLibrary.dll中找到AVSoft.ParsersBase.IParseRule? ParsersLibraryTest引用了ParsersBase,它没有任何意义。

17 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:10)

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

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

答案 3 :(得分:8)

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

答案 4 :(得分:4)

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

将目标框架更改为4.0后,

答案 5 :(得分:2)

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

答案 6 :(得分:1)

现在看来事情比以前容易了。

正如其他答案已经基本阐明的那样,此错误可能是由于同一NuGet软件包的较旧版本未包含某些较新的类型而导致的。在生产过程中,通常通过适当的版本控制来进行管理,而在开发过程中,最终可能会在更改时重用相同的版本号。这可能是发生此问题的地方。

要解决此问题,通常只需执行以下操作即可清除缓存:

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

答案 7 :(得分:0)

问题如下:我的解决方案有 Target Framework = 3.1,我添加了对 Microsoft.EntityFrameworkCore.SqlServer v 2.0 的引用,它是针对框架构建的。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

对于我来说,我选择了不正确的项目,正在创建一个类库项目,不得不选择“类库(.Net框架)”,但是我选择了“类库(.Net标准)”

替换相同的按钮即可解决问题。

答案 10 :(得分:0)

@binki的评论对我有帮助;

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

答案 11 :(得分:0)

我的情况是,我尝试使用无法引用所需WindowsBase.dll的.NET Core(3.1)测试项目来测试WPF项目。

答案 12 :(得分:0)

更新/合并程序包无济于事。即使是干净的仓库和Visual Studio的重启也无法为我解决。

但是重新启动确实可以解决问题!

答案 13 :(得分:0)

我已经为这个错误苦苦挣扎了一段时间,终于解决了。 这是如何重现它以及我如何修复它的方法。

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

解决方案是:

  • 删除添加的参考。
  • 从.csproj中删除已安装的软件包。
  • 从NuGet软件包管理器重新安装所需的软件包。
  • 关闭Visual Studio并重新打开它。
  • 清理项目。
  • 构建项目。

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

答案 14 :(得分:0)

我可以克服此错误的唯一方法是强制卸载所有相关的nuget软件包,然后重新安装它们。悲伤但真实。

答案 15 :(得分:0)

我遇到了类似的问题:引用类型'Func <>'声称它是在'mscorlib'中定义的,但是找不到。我有一个.Net 4的库, .Net 3.5程序引用。将两者都升级到4.61后,它可以工作。

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

进一步经验:有人在库项目(.Net 4)中添加了一个使用Func<T>参数的签名。但是示例程序(3.5)已经存在并且可以正常运行。但是在重新编译时,依赖项的依赖项发生冲突。因为mscorelib-3.5已被加载。一切都在编译时发生。

答案 16 :(得分:0)

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

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

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