【问题标题】:Referencing shared project in several projects of solution在解决方案的几个项目中引用共享项目
【发布时间】:2016-04-14 09:10:41
【问题描述】:

我正在尝试修复警告

警告 CS0436:“...\SharedProject1\SharedProject1\Class1.cs”中的类型“Class1”与“ClassLibrary1”中的导入类型“Class1”冲突,版本=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() { }
}

类库1

namespace ClassLibrary1
{
    public class Class1 { }
}

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

public MainWindow()
{
    InitializeComponent();
    var a = new SharedProject1.Class1();
    var b = new ClassLibrary1.Class1();
}
  • ClassLibrary1WpfApplication1 中引用SharedProject1

  • 构建,您将收到警告。

问题:如何修复警告?

【问题讨论】:

    标签: c# shared-project


    【解决方案1】:

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

    Shared -> Class
    Shared -> Application
    

    到:

    Shared -> Class -> Application
    

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      所以参考树可能看起来像这样:

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

      【讨论】:

      • 换句话说,您建议将共享项目转换 到类库中。我不能不同意。共享项目旨在用于不同的程序集,一旦您开始考虑将它们包含到 dll 中 - 对共享项目说不,将它们转换为 dll 并引用它们。
      • 我没有说要把它们转换成 dll。没有什么可以阻止您直接从其他解决方案中包含它们。我正在为多个类库在同一解决方案中引用同一共享项目时发生的冲突发布一个可能的解决方案。共享项目仍然存在,未受影响。
      • “共享项目仍然存在,未受影响” - 仅包装在 common.dll 中,不应被其他任何东西使用.. 听起来与 converting 给我 ;)
      • 我们有一个带有多个 dll + xamarin 应用程序的 Windows 窗体应用程序。 Windows 应用程序及其 dll 正在通过公共 dll 访问共享代码。 Xamarin 直接引用同一个共享项目,并且运行良好。
      【解决方案3】:

      尝试将您的代码更改为:

             namespace SharedProject1{public class Class1() { }}
      

      在您的项目 WpfApplication1 中,您必须添加对 SharedProject1 和 ClassLibrary1 的引用,这之后就很糟糕了:

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

      Project exemple

      【讨论】:

      • 感谢您纠正我在发布问题时所做的错字。然而问题仍然存在。
      猜你喜欢
      • 2017-09-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多