我看到很多关于The type '...' is defined in an assembly that is not referenced.
意味着什么的帖子,但据我所知,这些帖子并没有涵盖这个问题。
我有一个库 AAA ,它将signalR作为依赖项。依赖应该几乎没有任何后果,但反思中的一个细节可能会以某种方式起作用。
我在同一个解决方案中有另外两个可执行项目,名为 BBB 和 CCC ,两者都有与 AAA 看似相同的项目引用并使用 AAA 与自主信号R相同,所有signalR使用完全封装。
直到昨天, BBB 和 CCC 编译得很好。现在,没有任何有意义的更改我可以找到.cs文件,.csproj文件,或者其他,我在编译 BBB 时得到The type 'Microsoft.AspNet.SignalR.Hub' is defined in an assembly that is not referenced.
但是在编译 CCC <时没有强>
signalR要求所有Hub
实施都标记为public
。因此,在 AAA 中,MyHub : Hub
实现是 public
。否则它可能是私人的。其他库中没有引用它,没有 AAA 类型的成员返回Hub
或MyHub
。如果我将MyHub
标记为私有,则两个项目都可以正常编译。 (但由于signalR的反射逻辑预期,它在运行时失败)
对于{{>> BBB 中的“第一个”文件(项目恰好是空的,最简单的文件之一)而言,编译器错误只会导致错误。 BBB
块的{1}}。
也许这是一个分心,但我也很困惑它如何决定这个文件,因为即使我更改文件名或内部的类名(例如“zzz_ClassName”),它仍然选择“相同”文件作为每次显示错误的文件,除非我从编译中一起删除文件(此时很容易就是大部分死代码)。如果我删除该文件,则错误会一致地移动到某个其他文件,也会在命名空间行上移动。缺点是,用于选择此“第一个”文件的顺序似乎不是按字母顺序排列的文件名,类名,也不是.csproj文件中的顺序。
如果我需要/使用/曝光 BBB 或 CCC 中的MyHub对象,我希望得到此异常,但我不知道暴露或使用它。同样,如果我只是将namespace BBB {
更改为MyHub
而不是private
,则所有编译都可以正常(但不会运行)。无论哪种方式, CCC 编译得很好,我无法识别代码或.csproj中的任何有意义的差异,包括对 AAA 的项目引用。这刚刚开始发生,可能是由于代码更改(虽然我找不到)或清除旧的冲突程序集。
我已经清理并重建了。我甚至从资源管理器中手动删除了* .dll。我已经检查过GAC旧版本的程序集(可能性)。我已删除并读取了项目引用。我关闭并重新开放了VS(2012)。
你以前打过这个吗?我需要寻找什么?除了暴露的Hub或Hub派生类型或类型成员之外还需要直接引用?如果,当仅仅将MyHub标记为私有时,它编译得很好,BBB可能会对此感到不安?
谢谢!