Windows 表单引用和具有冲突导入类型的单例

Windows forms references and singleton with conflicted imported type

我有以下项目的解决方案:

我正在尝试将一些当前在两个项目中重复的 UserControl 移动到一个名为 CommonUI 的公共项目中。所以:

但这给了我很多警告,例如:

The type 'AppState' in '[..]Model\AppState.cs' conflicts with the imported type 'AppState' in '[..]CommonUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '[..]Model\AppState.cs'

问题是 AppState 是一个 Singleton 但它被复制了,App1 看到一个实例而 CommonUI 看到另一个实例我现在有 2 个 class 称为 "AppState",一个来自参考 App1- >Model 和另一个来自 App1->CommonUI->Model.

我做错了什么?谢谢

AppStateModel 中声明,这是一个共享项目。共享项目是 共享项目中的源代码被编译到引用它的每个项目中。换句话说,如果你有 - 比如说 - 3 个项目引用 Model 项目,你将声明 AppState class 3 次。

解决方案是将 Model 转换为 class 库,或者将 AppState 移动到其他地方。

根据我的经验,最好只对要构建到可执行文件中的相对无关紧要的小实用程序代码片段使用共享项目。从库中引用它们,或将它们用作库,都是自找麻烦。

以备日后遇到相同问题时参考。

"problem" 是共享项目。共享项目直接注入到引用项目中,因此我的代码同时注入到 CommonUI 项目和 App1 项目中。 CommonUI项目编译成一个DLL(包含model)被App1 exe使用,所以exe和DLL都包含Model代码。

从共享项目切换到 Class 库解决了问题。