У меня есть свойство Foo в классе Bar:
public int Foo
{
get
{
return GetFoo();
}
set
{
SetFoo(value);
}
}
Оба GetFoo
и SetFoo
украшены:
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
В результате FxCop правильно жалуется, что свойство Foo (или, скорее, его неявные методы получения и установки) не имеют того же LinkDemand:
CA2122: Microsoft.Security: 'Bar.Foo.get ()' вызывает 'Bar.GetFoo ()', который имеет LinkDemand. Делая этот вызов, Bar.GetFoo () косвенно подвергается воздействию пользовательского кода. Просмотрите следующий стек вызовов, который может раскрыть способ обхода защиты:
Однако, когда я попытался применить тот же атрибут SecurityPermission
к свойству, чтобы исправить это предупреждение, оказалось, что свойства не являются допустимой целью для этого атрибута.
Как мне правильно исправить это предупреждение FxCop?
edit: ответить на комментарий Эрика Липперта "зачем вообще LinkDemand"?
- Я написал функцию, используя Marshal.GetIUnknownForObject, у которой есть LinkDemand для разрешения неуправляемого кода.
- Я запустил FxCop, который пожаловался на CA2122.
- Я искал в Google CA2122 подсказки о том, что означает ошибка и как ее решить.
- В первом первом обращении к Google Я видел совет Майкла Фаннинга использовать LinkDemand для устранения ошибки.
Прочитав вашу реакцию, которая, кажется, ставит под сомнение мое здравомыслие, я быстро догадался, что совет Фаннинга неприменим в моем случае. Я прочитал статью Спрос против LinkDemand и вместо этого попытается использовать Demand.