Как исправить устаревшую ошибку компиляции «System.Security.Permissions.SecurityAction.RequestMinimum»?

Я получил следующее предупреждение компиляции как ошибку при обновлении некоторого кода ASP.NET с .NET 3.5: «System.Security.Permissions.SecurityAction.RequestMinimum» устарел.

Атрибут был применен на уровне сборки:

[assembly: System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.RequestMinimum, Execution=true)]

Кроме того, код использует фабрику программного обеспечения веб-клиента P&P, в частности библиотеку ObjectBuilder.WCSFExtensions. Кроме того, код предоставляет некоторые реализации поставщиков ролей.

Имейте в виду, что этот код используется как код Framework в других проектах, поэтому трудно определить, какие могут быть требования безопасности.


Итак, вопрос на миллион долларов:

Какое значение необходимо использовать для перечисления System.Security.Permissions.SecurityAction?

В качестве альтернативы есть лучший подход к применению этого атрибута безопасности?


person Schalk    schedule 25.11.2011    source источник


Ответы (2)


Вы прочитали полное предупреждение компилятора или посетили ссылку, которую оно содержит? «Голая» CLR больше не ограничивает разрешения CAS в .NET 4.0, если только вы не переключите переключатель «устаревшего режима», поэтому нет никакой замены вашему использованию RequestMinimum. SecurityPermissionAttribute уровня сборки должен быть удален, а не изменен.

Более полное объяснение изменений CAS 4.0, чем в MSDN, см. в http://blogs.msdn.com/b/shawnfa/archive/2009/05/21/security-policy-in-the-v4-clr.aspx и http://blogs.msdn.com/b/shawnfa/archive/2010/02/24/so-is-cas-dead-in-net-4-or-what.aspx.

person Nicole Calinoiu    schedule 25.11.2011
comment
Спасибо, Николь, статьи, которые вы упомянули, дают более четкую основу, чем документация MSDN (которая была исчерпывающей, но не давала никаких явных/очевидных утверждений: удалите атрибут). Я не был уверен, каковы будут последствия удаления атрибута. В конце концов, я решил пока оставить этот код в версии 3.5. - person Schalk; 29.11.2011
comment
RequestMinimum уровня сборки просто указывает хосту не загружать сборку, если ей не предоставлено указанное разрешение. В любом случае RequestMinimum для разрешения на выполнение почти бесполезен, поскольку хост не будет запускать какой-либо код в сборке, если у него нет разрешения на выполнение. Единственная разница в поведении во время выполнения, когда разрешение не предоставлено, — это сведения об исключении и момент его создания. Однако независимо от того, присутствует атрибут или нет, перед выполнением любого кода в сборке вы увидите исключение. - person Nicole Calinoiu; 30.11.2011

http://msdn.microsoft.com/en-us/library/ee471421.aspx

Похоже, проблема в том, что декларативная безопасность на уровне сборки в целом признана устаревшей. Возможно, вы можете применить это на уровне метода?

person Menno van den Heuvel    schedule 25.11.2011