Доступ к DLL-методам - PullRequest
       36

Доступ к DLL-методам

1 голос
/ 21 июня 2011


Я подготовил C # DLL для своего клиента, который выполняет некоторые функции.
Дело в том, что я использую и ту же DLL.
Как я могу сделать некоторые методы доступными для него и все методы, доступные для меня.
Спасибо,

Ответы [ 3 ]

5 голосов
/ 21 июня 2011

Использовать базу общего кода

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

  • Преимущество: они не видят ни одного источника, для которого вы хотите сохранитьсамостоятельно, и вам не нужно настраивать какой-либо специальный хостинг - просто отправьте им DLL
  • Недостаток: вам нужно проделать дополнительную работу, чтобы настроить базу кода для возможности форка.Для такого рода рефакторинга могут потребоваться значительные инвестиции в разработку.

Предоставить веб-сервис

Предоставить клиенту веб-сервис для доступа к кодучто им разрешен доступ.

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

Используйте атрибут InternalsVisibleTo в общей библиотеке DLL

  1. Отметьте эти методывы хотите использовать internal
  2. Код подписать свой собственный код, который использует DLL
  3. Код подписать общую DLL
  4. Добавить [assembly: InternalsVisibleTo] в общую библиотеку

См .: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

  • Преимущество: Это очень простое решение для кодирования
  • Недостаток: клиент будет иметь доступ к полному исходному коду,через отражатель.Вы можете смягчить это, запутав свой код или заключив лицензионное соглашение, которое по закону запрещает им осуществлять обратный инжиниринг вашего кода.
1 голос
/ 21 июня 2011

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

0 голосов
/ 21 июня 2011

Вы можете использовать директивы препроцессора C # , такие как #define, для компиляции двух версий библиотеки из одной и той же кодовой базы.

Затем отправьте одну версию своему клиенту, оставив другуюверсия для себя.

...