Требование разрешения CAS приводит к проверке каждого кадра стека вызовов выше метода, выполняющего требование. Поскольку ваша сборка не запускает код для вызова метода Main, требование не оценивается ни по одному из ваших кодов.
Именно отказ в разрешении на выполнение с помощью политики приводит к тому, что сборка не может быть выполнена. Разрешение оценивается самим CLR, когда он запускает ваш код сборки. Нет необходимости добавлять свои собственные требования для разрешения.
Чтобы сделать шаг назад и посмотреть, как должны использоваться требования CAS (декларативные или обязательные), рассмотрим, что разрешения защищают доступ к ресурсам. Любой код, разрешающий доступ к ресурсу (например, файловой системе), который иначе не был бы доступен для управляемого кода, должен предоставлять разрешение (например, FileIOPermission), которое можно использовать для управления доступом к этому ресурсу. Код, разрешающий доступ к ресурсу, также отвечает за требования к этому разрешению перед тем, как разрешить доступ к ресурсу.
Большинству разработчиков, пишущих управляемый код, никогда не потребуется ни создавать разрешение CAS, ни явно запрашивать разрешение CAS, поскольку они обычно получают доступ к ресурсам, предоставляемым (и защищаемым) либо библиотекой базовых классов .NET, либо другой Microsoft. или сторонние библиотеки.