0

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

  • 模型:与模型共享的项目
  • App1:一个窗体应用程序
  • App2:另一个窗体应用程序

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

  • 模型
  • CommonUI:参考模型
  • App1:引用模型和CommonUI
  • App2:引用模型和CommonUI

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

'[..]Model\AppState.cs' 中的类型 'AppState' 与 '[..]CommonUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 中的导入类型 'AppState' 冲突。使用 '[..]Model\AppState.cs' 中定义的类型

问题是 AppState 是一个单例,但它被重复了,App1 看到一个实例,CommonUI 看到另一个实例我现在有 2 个名为“AppState”的类,一个来自参考 App1->Model,另一个来自 App1->CommonUI - >模型。

我做错了什么?谢谢

4

2 回答 2

0

AppStateModel其中声明了一个共享项目。共享项目不是类库共享项目中的源代码被编译到每个引用它的项目中。换句话说,如果您有 - 比如说 - 3 个引用该项目的Model项目,那么您将声明AppState该类 3 次。

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

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

于 2019-10-01T19:51:17.143 回答
0

以备将来参考,以防有人遇到同样的问题。

“问题”是共享项目。共享项目直接注入到引用项目中,所以我的代码被注入到 CommonUI 项目和 App1 项目中。CommonUI 项目是在 App1 exe 使用的 DLL(包含模型)中编译的,因此 exe 和 DLL 都包含模型代码。

从共享项目切换到类库解决了这个问题。

于 2019-10-01T19:54:01.440 回答