Вопрос ссылки проекта C#

У меня есть c# решение и его составленные из многочисленных проектов.

У меня есть проект, который является моим baseassemblies, который содержит всю общую информацию, которую используют другие проекты. Все другие проекты имеют ссылки на baseassemblies.

Я добавил dll ссылку в своем baseassemblies однако, весь другой наклон проектов видит его.

Как я могу сделать его так, чтобы другие проекты видели DLL, на который ссылается baseassemblies? Я не хочу должным быть добавлять DLL ко всем проектам, так как это побеждает цель моего baseassemblies проекта.

16
задан Without Me It Just Aweso 18 February 2010 в 16:11
поделиться

4 ответа

Правильный подход заключается в том, чтобы другие ваши сборки НЕ нуждались в ссылке на эту другую DLL. Чтобы сделать это правильно, необходимо, чтобы ваши базовые сборки не отображали какие-либо типы, входящие в эту DLL. Оберните всю необходимую функциональность в базовые сборки и убедитесь, что тот, кто использует ваши базовые сборки, НЕ НУЖДАЕТСЯ в знаниях об используемых базовыми сборками базовой библиотеки DLL. В противном случае каждый проект, который будет ссылаться на ваши базовые сборки, если им нужно использовать что-то, что содержится в этой dll, им придется ссылаться на это.

23
ответ дан 30 November 2019 в 16:49
поделиться

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

Я предлагаю создать слой в проекте 'BaseAssemblies', к которому вы можете получить доступ из вашего приложения, что, по сути, создаст многоуровневую архитектуру.

пример

Слой приложения - использует IDataClass
. Уровень бизнес-логики - определяет IDataClass
Уровень доступа к данным - MyRawDataClass (реализует IDataClass)

Из примера видно, что для взаимодействия с DAL прикладному уровню нужна только ссылка на BAL.

3
ответ дан 30 November 2019 в 16:49
поделиться

В .NET нет переходных ссылок. Если сборке нужно сослаться на другую сборку, она должна сделать это напрямую, она не может "наследовать" эту ссылку от другой ссылки.

Обратите внимание, что проект должен ссылаться только на сборки, типы которых он непосредственно использует. Если A использует B, а B использует C, но A не использует C напрямую, то A должен ссылаться только на B напрямую (загрузчик обработает B, ссылающийся на C).

10
ответ дан 30 November 2019 в 16:49
поделиться

У вас могут быть интерфейсы экспорта BaseAssemblies, которые должны быть реализованы вашей "другой" dll. Кроме того, вашим BaseAssemblies требуется некоторая функциональность "фабрики классов" для этих классов .

0
ответ дан 30 November 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: