Ссылка на общий проект в нескольких проектах решения

Я пытаюсь исправить предупреждение

Предупреждение CS0436: тип "Class1" в "... \ SharedProject1 \ SharedProject1 \ Class1.cs" конфликтует с импортированным типом "Class1" в "ClassLibrary1, версия =1.0.0.0, культура = нейтральная, 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();
}
  • ссылка SharedProject1 в обоих ClassLibrary1 а также WpfApplication1;

  • построить, вы получите предупреждение.

Вопрос: как исправить предупреждение?

3 ответа

Решение

Измените схему зависимости с:

Shared -> Class
Shared -> Application

чтобы:

Shared -> Class -> Application

То есть: удалить из Application прямая ссылка на Shared,

Первая схема приводит к тому же классу, встроенному в 2 библиотеки. Вот что вызывает конфликт. Во второй схеме разделяемая библиотека встроена в Class DLL и, следовательно, также доступны Application,

Первая схема будет в порядке, если Class а также Application были независимы друг от друга.

Все это потому, что общий проект не создает библиотеку. Поэтому нужно подумать о том, чтобы он появился где-то в библиотеке. Обычно только в одном месте. Обычно это означает, что на каждую общую библиотеку следует ссылаться только один раз.

Решение Jarekczek прекрасно работает, когда у вас есть только одна библиотека классов, но как только вы добавите другую библиотеку классов, которая также ссылается на общий проект, вы снова получите то же предупреждение.

Решение может быть очевидным, но если это не здесь, это...

Вы можете создать еще один обычный проект библиотеки классов с именем "Common", который сам по себе не содержит никаких классов, а только ссылается на общий проект. Он служит "контейнером" для общего кода.

Таким образом, ссылочное дерево может выглядеть так:

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

Попробуйте изменить свой код как:

       namespace SharedProject1{public class Class1() { }}

В вашем проекте WpfApplication1 вы должны добавить ссылки на SharedProject1 и ClassLibrary1, после чего она должна появиться:

У меня есть проект для вас с вашей спецификой:

Пример проекта

Другие вопросы по тегам