在几个解决方案项目中引用共享项目
我正在努力修复警告
警告CS0436:’… \ SharedProject1 \ SharedProject1 \ Class1.cs’中的类型’Class1’与’ClassLibrary1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’中的导入类型’Class1’冲突。 使用’… \ SharedProject1 \ SharedProject1 \ Class1.cs’中定义的类型。 WpfApplication1 … \ SharedProject1 \ WpfApplication1 \ MainWindow.xaml.cs
摄制:
- 用3个项目创建解决方案:
SharedProject1 (向其添加新类)
namespace SharedProject1 { public class Class1() { } }
ClassLibrary1的
namespace ClassLibrary1 { public class Class1 { } }
WpfApplication1 (将此添加到MainWindow
构造函数)
public MainWindow() { InitializeComponent(); var a = new SharedProject1.Class1(); var b = new ClassLibrary1.Class1(); }
-
引用
ClassLibrary1
和WpfApplication1
SharedProject1
; -
建立,你会得到一个警告。
问题:如何修复警告?
更改依赖关系架构:
Shared -> Class Shared -> Application
至:
Shared -> Class -> Application
即:从Application
删除对Shared
的直接引用。
第一个模式导致同一个类内置到2个dll中。 这就是导致冲突的原因。 在第二个模式中,共享库构建在Class
dll中,因此也可以访问Application
。
如果Class
和Application
彼此独立,那么Class
一个模式就可以了。
所有这一切都是因为共享项目不会生成库。 所以必须考虑让它出现在图书馆的某个地方。 通常只在一个地方。 这通常意味着每个共享库只应引用一次。
只有一个类库时,Jarekczek的解决方案才能正常工作,但只要添加另一个同时引用共享项目的类库,您就会再次收到相同的警告。
解决方案可能很明显,但如果它不在这里则是……
您可以创建另一个名为“Common”的普通类库项目,该项目不包含任何类,但仅引用共享项目。 它充当共享代码的“容器”。
所以引用树看起来像这样:
SharedProject -> Common Common -> ClassLibrary1 Common -> ClassLibrary2 ClassLibrary1 -> Application ClassLibrary2 -> Application Common -> Application
尝试将您的代码更改为:
namespace SharedProject1{public class Class1() { }}
在您的项目WpfApplication1中,您必须添加对SharedProject1和ClassLibrary1的引用,之后它会引发:
我用你的specefication为你创建了一个项目:
项目例子