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

Referencing shared project in several projects of solution

我正在尝试修复警告

Warning CS0436: The type 'Class1' in '...\SharedProject1\SharedProject1\Class1.cs' conflicts with the imported type 'Class1' in 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '...\SharedProject1\SharedProject1\Class1.cs'. WpfApplication1 ...\SharedProject1\WpfApplication1\MainWindow.xaml.cs

转载:

SharedProject1(添加新的class)

namespace SharedProject1
{
    public class Class1() { }
}

类库1

namespace ClassLibrary1
{
    public class Class1 { }
}

WpfApplication1(将此添加到 MainWindow 构造函数)

public MainWindow()
{
    InitializeComponent();
    var a = new SharedProject1.Class1();
    var b = new ClassLibrary1.Class1();
}

问题:如何修复警告?

尝试将您的代码更改为:

       namespace SharedProject1{public class Class1() { }}

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

我已经根据您的规范为您创建了一个项目:

Project exemple

更改依赖模式:

Shared -> Class
Shared -> Application

至:

Shared -> Class -> Application

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

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

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

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

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

解决方案可能很明显,但如果这里没有,那就是...

您可以再创建一个名为 'Common' 的普通 class 库项目,它本身不包含任何 classes,但仅引用共享项目。它作为共享代码的 'container'。

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

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