C # - Получение справочных ссылок - PullRequest
2 голосов
/ 10 декабря 2008

Я создал проект библиотеки классов, который ссылается на пару DLL. В конструкторе моего проекта библиотеки классов я использую некоторые перечисления из одной из упомянутых dll. При использовании моей библиотеки классов в другом проекте возможно ли не добавлять ссылки на мою библиотеку DLL и те, на которые ссылается мой проект библиотеки классов?

Ответы [ 6 ]

2 голосов
/ 10 декабря 2008

Это зависит от того, что вы подразумеваете под ссылкой внутри .

Если ваш проект приложения использует тип A из вашей библиотеки классов, и этот класс не предоставляет какие-либо открытые типы из других библиотек, сторонних или нет, вам не нужно добавлять какие-либо ссылки на больше, чем ваша библиотека классов, содержащая тип A.

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

Так что, если вы действительно имеете в виду использует внутренне , то нет необходимости добавлять более одной ссылки на вашу библиотеку классов.

Однако, если компилятор жалуется, то вот что имеет значение.

1 голос
/ 10 декабря 2008

Вам нужно только сослаться на DLL. Вы ссылаетесь только на то, что используете в сборке; сборки являются полностью самоописываемыми отдельными единицами и, таким образом, не требуют ссылки на ссылки, на которые ссылаются ссылки на сборки (я издеваюсь с моим повторным использованием слова 'ссылка' здесь, кстати :-).

Представьте, если бы вам пришлось сделать это - BCL ссылается на множество разных вещей, не говоря уже о стороннем компоненте, представьте, сколько усилий вам понадобится, чтобы просто получить правильные ссылки! !

0 голосов
/ 10 декабря 2008

Я думаю, что lassevk объяснил это кратко, но просто хотел добавить, что хотя вам не нужно ссылаться на эти дополнительные сборки, используемые DLL (опять-таки, предполагая, что они используются только внутри и не выставляются) вам делать все равно нужно сделать их доступными для вашего приложения. То есть они должны быть доступны для поиска - либо рядом с приложением, либо в GAC, иначе использующая их DLL не сможет их найти.

0 голосов
/ 10 декабря 2008

Возьмите свой собственный enum в ctor и переведите его в сторонний enum. Я полагаю, что это не даст вашей вызывающей стороне ссылаться на стороннюю сборку (хотя, конечно, она все равно должна быть доступна во время выполнения, чтобы ваш код работал).

0 голосов
/ 10 декабря 2008

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

0 голосов
/ 10 декабря 2008

Если вы ссылаетесь на какие-либо типы (даже если это только их члены или типизированные экземпляры), на которые ссылается ссылочная сборка, то вам также необходимо включить ссылку на эту сборку.

...