【发布时间】:2016-09-07 17:18:18
【问题描述】:
(请随时为这个问题建议一个更准确的标题。)
在我的 Visual Studio 2015 解决方案中,我有三个项目(我们称它们为 Alpha、Beta 和 Gamma),它们或多或少是相同的,但不同之处在于它们定义了不同的后端。这两个项目都将一个类热插入到同一个命名空间中:
阿尔法:
namespace SharedNamespace {
public class SharedClass {
// implement SharedClass using Alpha's backend
}
}
测试版:
namespace SharedNamespace {
public class SharedClass {
// implement SharedClass using Beta's backend
}
}
伽玛:
namespace SharedNamespace {
public class SharedClass {
// implement SharedClass using Gamma's backend
}
}
有几个项目使用这个热插拔类,每个都引用 Alpha、Beta 或 Gamma。其中一个(我们称之为 Omricon)曾经参考 Alpha,但现在参考 Gamma:
// ...
SharedNamespace.SharedClass sharedClass;
sharedClass.DoThing();
// ...
但是,当我尝试构建 Omricon 时,C# 编译器给出了错误 CS0433:
The type 'SharedClass' exists in both 'Alpha, Version=0.0.0.0 (etc)'
and 'Gamma, Version=0.0.0.0 (etc)'
但是,Omricon 仅在构建时引用 Gamma - 当我进入项目引用列表时,只出现对 Gamma 的引用。据我了解,Omricon 应该对 Alpha 一无所知,更不用说它在同一位置定义了一个类。只有 Omricon 无法构建 - 使用 Alpha 和 Beta 的其他项目工作正常,当我将 Omricon 切换回使用 Alpha 时,它也工作正常!
在我看来,对 Alpha 的引用正在维护,然后,在其他地方。如何在代码中的任何位置找到对 Alpha 的杂散引用并将其删除?
请注意,我已尝试强制完全重建(如this answer 建议的那样),但仍然出现相同的错误,因此它与错误的对象缓存无关。
编辑:澄清倒数第二段
【问题讨论】:
-
两个项目(Gamma 和 Alpha)是否在同一个解决方案中?
-
既然这些类在概念上存在于不同的空间中,为什么不使用不同的命名空间?
-
@DavidL 是的。
-
那是你的问题。您正在尝试在同一解决方案中的同一命名空间中构建具有相同名称的类。为什么不会您希望这会失败?
-
@Servy (1) 这不是我的决定,(2) 生成使用
SharedClass的代码。
标签: c# visual-studio-2015