Ссылка на общий проект в нескольких проектах решения
Я пытаюсь исправить предупреждение
Предупреждение 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, после чего она должна появиться:
У меня есть проект для вас с вашей спецификой: