Как сделать «публичную публику» v / s «внутренней публикой»?
258 просмотра
3 ответа
Возможный дубликат:
Когда следует использовать [assembly: InternalsVisibleTo ()]?
Доступ к DLL-методам
У меня есть две сборки, A.dll и B.dll. A.dll имеет некоторые общие черты, и B.dll использует его. Я должен распространять A.dll и B.dll для других пользователей в конце концов.
Однако в A.dll есть некоторые методы, которые я пометил как общедоступные (для использования B.dll), но я не хочу, чтобы кто-либо другой использовал их.
Есть ли хороший способ добиться этого? Является ли использование InternalsVisibleToAttribute
хорошей практики для достижения этой цели?
Ответы (3)
9 плюса
Отметьте элементы как внутренние в A.dll и добавьте следующее свойство сборки
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo( "B" )]
Тем не менее, имейте в виду, что вы все равно можете получить доступ к внутренним вещам через отражение, чтобы они не были на 100% запечатаны.
Автор: James Размещён: 25.07.2012 01:421 плюс
InternalsVisibleTo
это путь
Название вашего вопроса поначалу немного сбивало с толку, но после прочтения стало ясно, что вам нужно, чтобы некоторые internal
( не public
) члены были доступны для конкретной сборки.
1 плюс
InternalsVisibleToAttribute
Атрибут является одним из способов сделать это , но вы должны понимать , что он подвергает все внутренности в другую сборку.
Также обратите внимание, что если вы не используете подписанные сборки, то InternalsVisibleToAttribute
разрешит доступ к внутренним компонентам из любой сборки с таким именем. Это может быть нежелательно.
Другим вариантом может быть использование инструментов для внедрения необходимого кода из сборки «A» в сборку «B». Это позволило бы «В» функционировать независимо без доступа к внутренним органам. Это зависит от того, как используются ваши сборки, является ли это желательным решением или нет.
Наконец, вы можете получить доступ к коду в сборке «A», используя отражение. Это немного неудобно, но если вам понадобится всего пара вещей, этого может быть достаточно. Это также позволит вам обеспечить хороший откат или обработку ошибок, когда сборка "B" присутствует, но отсутствует.
Как уже отмечали другие, отражение может предоставить доступ ко всему внутри вашей сборки или нет. Если вам нужно защитить свой код, вы должны посмотреть на запутывание.
Автор: Marnix van Valen Размещён: 25.07.2012 01:51Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- c# Setting Objects to Null/Nothing after use in .NET
- c# Конвертировать целые числа в записанные числа
- c# Почему я не могу иметь абстрактные статические методы в C #?
- c# Как я могу оценить код C # динамически?
- internalsvisibleto Атрибут InternalsVisibleTo не работает
- internalsvisibleto Как сделать «публичную публику» v / s «внутренней публикой»?
- internalsvisibleto как я могу получить доступ к внутренностям в asp.net 5
- internalsvisibleto Доверенный сертификат pfx не работает с атрибутом InternalsVisibleTo
- internalsvisibleto Microsoft подделывает внутренние классы Shim не генерируется
- internalsvisibleto Если частные объекты в F # компилируются во внутреннюю, почему InternalsVisibleTo не работает?
- internalsvisibleto Почему ссылка на сборку InternalsVisibleTo также должна быть подписана?
- internalsvisibleto Какие `[InternalsVisibleTo]` для сборок .NET Framework и .NET Standard / Core Framework?