在几个解决方案项目中引用共享项目

我正在努力修复警告

警告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(); } 
  • 引用ClassLibrary1WpfApplication1 SharedProject1 ;

  • 建立,你会得到一个警告。

问题:如何修复警告?

更改依赖关系架构:

 Shared -> Class Shared -> Application 

至:

 Shared -> Class -> Application 

即:从Application删除对Shared的直接引用。

第一个模式导致同一个类内置到2个dll中。 这就是导致冲突的原因。 在第二个模式中,共享库构建在Class dll中,因此也可以访问Application

如果ClassApplication彼此独立,那么Class一个模式就可以了。

所有这一切都是因为共享项目不会生成库。 所以必须考虑让它出现在图书馆的某个地方。 通常只在一个地方。 这通常意味着每个共享库只应引用一次。

只有一个类库时,Jarekczek的解决方案才能正常工作,但只要添加另一个同时引用共享项目的类库,您就会再次收到相同的警告。

解决方案可能很明显,但如果它不在这里则是……

您可以创建另一个名为“Common”的普通类库项目,该项目不包含任何类,但仅引用共享项目。 它充当共享代码的“容器”。

所以引用树看起来像这样:

 SharedProject -> Common Common -> ClassLibrary1 Common -> ClassLibrary2 ClassLibrary1 -> Application ClassLibrary2 -> Application Common -> Application 

尝试将您的代码更改为:

  namespace SharedProject1{public class Class1() { }} 

在您的项目WpfApplication1中,您必须添加对SharedProject1和ClassLibrary1的引用,之后它会引发:

我用你的specefication为你创建了一个项目:

项目例子