C# 在解决方案结构中引用共享项目

C# 在解决方案结构中引用共享项目,c#,class-library,project-reference,shared-project,C#,Class Library,Project Reference,Shared Project,我试图解决在两个类库中引用共享项目的问题 在解决方案内部,项目之间的参考是: 类库A->SharedProject 类库B->SharedProject 类库C->SharedProject 类库C->类库A 类库C->类库B 在共享项目中,我只有一个带有逻辑的类,我想共享它,所以在每个类库项目中,我使用共享项目中的同一个类。但是在构建之后,我在类库C中得到以下错误: 类库A和类库B中都存在“同一类”类型 有没有一种方法可以做到这一点,或者我应该用经典类库替换共享项目?一个“共享项目”实际上

我试图解决在两个类库中引用共享项目的问题

在解决方案内部,项目之间的参考是:

  • 类库A->SharedProject
  • 类库B->SharedProject
  • 类库C->SharedProject
  • 类库C->类库A
  • 类库C->类库B
在共享项目中,我只有一个带有逻辑的类,我想共享它,所以在每个类库项目中,我使用共享项目中的同一个类。但是在构建之后,我在类库C中得到以下错误:

类库A和类库B中都存在“同一类”类型


有没有一种方法可以做到这一点,或者我应该用经典类库替换共享项目?

一个“共享项目”实际上是一种在多个项目之间共享源代码的方法,而无需构建DLL(就像在类库中一样)。您可以将其视为将SharedProject的源代码复制粘贴到类库A和类库B中

此时,很明显类库A和类库B在SharedProject中定义了相同的类,但是它们都定义了它们,而不是引用相同的类


你最初的直觉是正确的,正确的方法是用类库替换它,这正是它的用途。然后,您将有一个a和B都引用的SharedProject.dll,然后C将引用a.dll、B.dll和SharedProject.dll,这一切都应该正常(除非版本不匹配)。

只要确保两个类都在不同的命名空间下,问题就解决了。每个类库都有不同的命名空间,共享项目中的类具有特定的命名空间,但它在其他库中共享,当然存在相同的类型。您将其编译到每个DLL中。它位于A、B和C中。有关这与跨多个项目引用公共独立DLL的区别的详细信息,请参见标记的重复。共享项目功能用于在DLL编译一次就无法工作的情况下(例如,针对完全不同的平台)促进代码共享。就我个人而言,我仍然只是为每个平台编译DLL,但是VS提供了这个特性,将整个代码合并到引用项目中。这更像是将现有文件添加为链接,而不是引用。