Для вызова методов расширения между классами требуется разрешение ControlEvidence - PullRequest
1 голос
/ 01 февраля 2010

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

   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. Есть ли какое-то ограничение на вызов методов расширения изнутри методов расширения между классами? Есть ли обходной путь, отличный от слияния всех расширений в один огромный класс?

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

Ответы [ 2 ]

0 голосов
/ 01 февраля 2010

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

0 голосов
/ 01 февраля 2010

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

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

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

...