Система безопасности в .NET довольно сложна. Я не уверен, что ответ такой простой, как может показаться на первый взгляд. Даже если у вас есть одна сборка, проверки безопасности все еще выполняются. Когда вы запускаете приложение, имеющее всю логику в одном .exe, вы не обходите проверки безопасности .NET для загрузки и проверки сборки и не обходите проверки типа наследования. Однако, как только безопасность будет проверена для данной области действия, она обычно не повторится (могут быть некоторые смягчающие обстоятельства, которые заставили бы повторную проверку доказательств.)
Несколько сборок не будут вести себя иначе. Могут быть некоторые дополнительные затраты на сборку и стоимость доступа к первому типу, так как каждая новая сборка потребует этих первоначальных проверок безопасности. Тем не менее, эти проверки, как правило, бледнеют по сравнению с процессом JIT-кода.
Помимо контрольных проверок загрузки и типа базовой сборки, вы также можете иметь явные требования к разрешению. Пространства имен Microsoft System пронизаны проверками безопасности Demand и LinkDemand, которые подтверждают, что все вызывающие абоненты в стеке (спрос) или непосредственный вызывающий абонент (запрос на связь) имеют разрешение на выполнение вызова. (В ваш код также должны включаться такие проверки, которые были бы пригодны для подтверждения того, что у вызывающих есть соответствующее разрешение.) Эти проверки безопасности будут происходить независимо от того, где код живет ... локально, в другой сборке или даже в сборке в другом домене приложения , Однако, как только вы попадаете в вызовы, сделанные в других доменах приложений или процессах, или даже на сервисы и другие серверы, накладные расходы на марширование этих вызовов и подключение к ним на порядок дороже.
Это даже не вся картина, когда дело доходит до обеспечения безопасности .NET. Некоторые проверки безопасности являются более дорогостоящими, чем другие. Некоторые требуют учетных данных, другие требуют доказательств и т. Д. Безопасность - это не то, что вы можете уклониться от нее ... ее важнейшим и важным компонентом современной разработки программного обеспечения. Я бы не стал так беспокоиться о стоимости безопасности ... поскольку он хорошо реализован и хорошо оптимизирован в .NET framework и CLR. Я бы постарался обеспечить правильное архивирование и организацию вашего приложения.Если разделение кода на несколько сборок логично, это уменьшает затраты на обслуживание, развертывание и рефакторинг, тогда его WELL стоит небольшая дополнительная стоимость для обеспечения безопасности.
@ Andrew: Done. – dewald