类型' ...'在未引用的程序集中定义。除了类型没有暴露(除了它是`public` by requirement)

时间:2014-04-02 20:24:54

标签: c# .net visual-studio-2012 dependencies signalr

我看到很多关于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 类型的成员返回HubMyHub。如果我将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可能会对此感到不安?

谢谢!

0 个答案:

没有答案