Ответ 1
Чтобы использовать AppDomain.CreateDomain для создания изолированного appdomain, вы должны передать PermissionSet, который содержит только разрешения, которые вы хотите предоставить изолированным сборкам. Если вы не хотите предоставлять ReflectionPermission, вы просто не должны добавлять его в набор разрешений.
Тем не менее ReflectionPermission далека от единственного "опасного" разрешения, которое обычно должно быть отказано в надстройках общего источника. Если вы хотите быть очень строгим, вам может потребоваться предоставить только SecurityPermission\Execution. например:.
PermissionSet permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
Если вы хотите включить дополнительные "безопасные" разрешения, вы можете просто добавить их в набор разрешений, используя дополнительные вызовы AddPermission. Если вы хотите включить все разрешения, которые считались достаточно безопасными для предоставления интернет-кода, находящегося под дефинированной системой политики CAS, вы можете извлечь их, передав доказательства интернет-зоны в статический метод SecurityManager.GetStandardSandbox. например:.
Evidence evidence = new Evidence();
evidence.AddHostEvidence(new Zone(SecurityZone.Internet));
PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence);
N.B.: Оба этих подхода описаны в статье MSDN, на которую вы ссылались в своем вопросе.