Почему при создании проекта C ++ / CLR в VS2010 в AssemblyInfo по умолчанию добавляется SecurityAction.RequestMinimum? - PullRequest
2 голосов
/ 20 октября 2010

Если я правильно понимаю, SecurityAction.RequestMinimum устарел для .NET Framework 4.0 здесь . Теперь, когда я создаю проект C ++ / CLR, предназначенный для .NET Framework 4.0, эта строка автоматически добавляется в автоматически сгенерированный AssemblyInfo.cpp:

[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];

Этот проект компилируется отлично и все, но если я напишу эквивалент C # в проекте C # .NETFX 4.0, он не будет компилироваться. Вы знаете, где я могу найти информацию об этом?

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Это не ново, этот же атрибут был добавлен в предыдущих версиях Visual Studio. Они просто не изменили шаблон элемента. Это атрибут CAS, который в основном говорит: «Мне нужны как минимум минимальные разрешения для запуска неуправляемого кода».

Что уместно, это разрешение всегда необходимо для приложения C ++ / CLI. Даже если вы пишете чистый код, для инициализации CRT все равно требуется разрешение неуправляемого кода. Разрешение применимо только в сценариях с песочницей, когда код не выполняется с полным доверием, например, в веб-браузере или в настройке безопасного плагина. CAS действительно устарела, но не была удалена. Не совсем уверен, что происходит в .NET 4.0 в эти дни. Это было чем-то вроде того, что CAS устарел, это было неэффективно, потому что это было так трудно понять обычному Джо, как я.

Блог Шона Фаркаса - лучший источник информации об этом. Он гуру безопасности .NET в Microsoft.

Версия на C # почти такая же:

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

Не знаю, зачем вам это нужно, достаточно сборки C ++ / CLI, запрашивающей это.

1 голос
/ 20 октября 2010

Я подозреваю, что это связано с тем, что в среде IDE существует «лучшая догадка», что код C ++ / CLI часто нужно будет вызывать через собственный код C ++.

Я изменил этот параметр в (очень маленьком) проекте C ++ / CLI VS2010 Express на значение «false», и мое полностью управляемое приложение по-прежнему работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...