Я думаю, что это зависит от целей, вы будете следовать в сокрытии основных библиотек.
Если вы не хотите, чтобы ваши клиенты вызывали код, например, если это может нарушить сценарии использования ваших библиотек или может привести к нежелательному поведению или что-то еще, чтобы предотвратить ЗВОНОК кода, вы можете сделать защищенный классы внутри и использовать InternalsVisibleToAttribute для включения сборки Facade. Я бы даже использовать еще одну конфигурацию сборки, если я по-прежнему необходим базовые классы, чтобы быть видимыми в моих приложениях:
#if PUBLIC_BUILD
internal
#else
public
#endif
class ProtectedCoreClass
Но, конечно, если у вас есть слишком много классов, некоторый сценарий должен быть готов изменить существующие классы и Шаблон нового класса Visual Studio должен быть изменен.
Но еще один случай - если вы хотите, чтобы ваш код не был ОБРАТНЫ вашими клиентами, чтобы скрыть некоторые супер уникальные алгоритмы или что-то в этом роде. Затем вы должны заглянуть в какой-нибудь программный обфускатор. Но нет абсолютно никакого способа гарантировать, что код будет декомпилирован и проанализирован на 100%. Это касается только цены на крекеры или конкурентов за это.
Но если HIDING исходный код по-прежнему чрезвычайно важен, вероятно, вы должны просто разместить свой код на своих серверах (чтобы убедиться, что код физически недоступен) или в облаке, а также предоставить WCF или веб-службу, сборка вызовет.
Для этого вам потребуется включить базовую DLL в файлы, через которые вы проходите, или .Net будет генерировать исключение, не найденное. – David
, а ваша озабоченность больше связана с внешним распространением вашей основной DLL, которая затем может быть использована напрямую? – baldric
Да, в основном нам нужно предоставить подмножество функциональности извне, не подвергая никаким основным механизмам. Даже если бы мы могли каким-то образом «слить» ядро dll в оболочку, он все равно может быть декомпилирован. – David