Вопрос:

Как сделать «публичную публику» v / s «внутренней публикой»?

c# internalsvisibleto

258 просмотра

3 ответа

557 Репутация автора

Возможный дубликат:
Когда следует использовать [assembly: InternalsVisibleTo ()]?
Доступ к DLL-методам

У меня есть две сборки, A.dll и B.dll. A.dll имеет некоторые общие черты, и B.dll использует его. Я должен распространять A.dll и B.dll для других пользователей в конце концов.

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

Есть ли хороший способ добиться этого? Является ли использование InternalsVisibleToAttributeхорошей практики для достижения этой цели?

Автор: Anash P. Oommen Источник Размещён: 25.07.2012 01:40

Ответы (3)


9 плюса

1702 Репутация автора

Отметьте элементы как внутренние в A.dll и добавьте следующее свойство сборки

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo( "B" )]

Тем не менее, имейте в виду, что вы все равно можете получить доступ к внутренним вещам через отражение, чтобы они не были на 100% запечатаны.

Автор: James Размещён: 25.07.2012 01:42

1 плюс

49157 Репутация автора

InternalsVisibleTo это путь

Название вашего вопроса поначалу немного сбивало с толку, но после прочтения стало ясно, что вам нужно, чтобы некоторые internal( не public ) члены были доступны для конкретной сборки.

Автор: Diego Mijelshon Размещён: 25.07.2012 01:43

1 плюс

10849 Репутация автора

InternalsVisibleToAttributeАтрибут является одним из способов сделать это , но вы должны понимать , что он подвергает все внутренности в другую сборку.

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

Другим вариантом может быть использование инструментов для внедрения необходимого кода из сборки «A» в сборку «B». Это позволило бы «В» функционировать независимо без доступа к внутренним органам. Это зависит от того, как используются ваши сборки, является ли это желательным решением или нет.

Наконец, вы можете получить доступ к коду в сборке «A», используя отражение. Это немного неудобно, но если вам понадобится всего пара вещей, этого может быть достаточно. Это также позволит вам обеспечить хороший откат или обработку ошибок, когда сборка "B" присутствует, но отсутствует.

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

Автор: Marnix van Valen Размещён: 25.07.2012 01:51
Вопросы из категории :
32x32