Для вызова методов расширения между классами требуется разрешение ControlEvidence.

Я работал над пониманием безопасности доступа к коду и надеялся, что кто-нибудь сможет объяснить мне это поведение и почему оно требует дополнительных разрешений. Скажем, у меня есть два метода расширения

   public static string dib(this string source)
   { 
     return souce.dob();
   }

   public static string dob(this string source)
   {
     return source+"dob":
   }

Если эти два метода появляются в одном классе, они не требуют специальных разрешений CAS. Однако, как только я перемещаю dob в другой класс, мне требуется System.Security.Permissions.SecurityPermission с флагом ControlEvidence. Есть ли какое-то ограничение на вызов методов расширения из методов расширения между классами? Есть ли обходной путь, кроме объединения всех расширений в один огромный класс?

'''Редактировать:''' Как оказалось, реальная проблема не была связана с методом расширения. Был конструктор, который использовал RegEx в одном из классов. Регулярные выражения, наряду с другими функциями, компилируемыми во время выполнения, требуют ControlEvidence. Спасибо за вашу помощь, эта штука с CAS очень сложная.


person stimms    schedule 01.02.2010    source источник


Ответы (2)


Я не могу воспроизвести проблему, отказав в SecurityPermission\ControlEvidence либо вызывающему, либо вызываемому, либо обоим. Какую версию .NET Framework вы используете? Кроме того, чтобы помочь с попытками воспроизведения, не могли бы вы указать, для каких из соответствующих сборок отсутствует разрешение SecurityPermission\ControlEvidence?

person Nicole Calinoiu    schedule 01.02.2010

Мне это кажется очень странным. Честно говоря, я не очень хорошо разбираюсь в проблемах CAS, но я был бы очень удивлен, если бы это действительно было проблемой метода расширения.

Если вы вызываете методы расширения, используя синтаксис метода без расширения (например, TypeName.Method(args)), работает ли это? Если нет, и вы делаете их нерасширяющими методами, работает ли это? Если вы столкнетесь с одной и той же проблемой в обоих случаях, то, очевидно, это не проблема метода расширения, что, по крайней мере, должно помочь вам в исследовании проблемы. Если вы не столкнулись с той же проблемой, подробно опишите, что именно работает... единственным отличием в объявлениях методов расширения должны быть дополнительные атрибуты, и я не понимаю, как это могло бы влияют на КАС.

Я предполагаю, что вы вызываете эти методы в «нормальном» сценарии, а не через лямбда-выражения, строящие деревья выражений? Это внесло бы дополнительные сложности.

person Jon Skeet    schedule 01.02.2010