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

时间:2016-04-14 09:10:42

标签: c# shared-project

我正在尝试修复警告

  

警告CS0436:'... \ SharedProject1 \ SharedProject1 \ Class1.cs'中的类型'Class1'与'ClassLibrary1中的导入类型'Class1'冲突,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null ”。使用'... \ 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();
}
    {li>

    SharedProject1ClassLibrary1中的参考WpfApplication1;

  • 构建,您将收到警告。

问题:如何修复警告?

3 个答案:

答案 0 :(得分:3)

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

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

您可以再创建一个名为' Common'的普通类库项目。它不包含任何自己的类,但仅引用共享项目。它是一个容器'共享代码。

因此参考树可能如下所示:

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

答案 1 :(得分:2)

从以下位置更改依赖关系架构:

Shared -> Class
Shared -> Application

为:

Shared -> Class -> Application

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

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

如果ClassApplication相互独立,第一个架构就可以了。

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

答案 2 :(得分:0)

尝试将代码更改为:

STDOUT

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

我已经为您创建了一个项目:

Project exemple