Перекрестные ссылки сборки
-
14-10-2019 - |
Вопрос
У меня есть три проекта в моем решении .NET.
Главный проект и два классовых библиотечных проектов.
Я обнаружил, что мне нужно пересекать ссылку на библиотечные проекты классов.
Могу ли я сделать это? Это безопасно или есть какие -то соображения?
Решение
IDE не позволит вам, когда проекты будут в одном решении. Есть тонкие способы запустить его. Но тогда решение не может быть построено с нуля (т.е. Build + Rebuild), поскольку ссылка на сборку еще недоступна. Refactor This, вы, вероятно, хотите третью сборку, которая оба могут ссылаться.
Другие советы
Круговые ссылки есть возможный (через командную линию и некоторые уловки; не через IDE), но являются серьезной болью; Не делай этого!
Либо добавьте дополнительный сборка для общих типов или объедините две библиотеки.
Во многих отношениях меньше - это проще ... множество DLL не означает, что вы достигли чистоты - это просто беспорядок.
Когда я столкнулся с этой проблемой, у меня есть Созданы классы, которые имеют только свойства. Может быть Employee
, Customer
, Product
, что бы ни. Эти классы не должны ссылаться на любой другой проект, поэтому несколько проектов могут ссылаться на них.
Методы, которые принадлежат этим объектам (Employee
, Customer
, Product
) затем перейдите на свои классы в других проектах.
Одна ситуация, когда я сталкивался с этим довольно часто, заключается в трехслойном приложении - уровне презентации, бизнес -уровне и уровне доступа к данным. Я хочу, чтобы DAL забрал данные и заполнил объект сотрудника, который возвращается в BLL. Если класс сотрудников находится в BLL и имеет как свойства, так и методы, то нет простого способа заполнить объект сотрудника в DAL и вернуть его в BLL - потому что BLL должен иметь ссылку на DAL, поэтому Дал, в свою очередь, не может ссылаться на BLL. Создание отдельного проекта с классами только для свойств (Employee
, Customer
, Product
) это один из способов решить эту проблему.
Если под «перекрестной ссылкой» вы имеете в виду, что хотите сделать следующее:
1) Проект ГЛАВНЫЙ Содержит ссылки на Библиотека-альфа а также Библиотека-бета
2) Проект Библиотека-альфа Содержит ссылки на Библиотека-бета
3) Проект Библиотека-бета Содержит ссылки на Библиотека-альфа
Тогда нет. Visual Studio не сможет построить ГЛАВНЫЙ Пока это не строит АЛЬФА а также БЕТА. Анкет Он не сможет построить АЛЬФА Пока это не строит БЕТА. Анкет И это не сможет построить БЕТА Пока это не строит АЛЬФА. Анкет Поэтому он не сможет что -либо построить.