为什么在VS2010中创建C ++ / CLR项目时,默认情况下会在AssemblyInfo中添加SecurityAction.RequestMinimum?

时间:2010-10-19 20:15:31

标签: visual-studio-2010 visual-c++ c++-cli

如果我理解正确,则对于.NET Framework 4.0 here,SecurityAction.RequestMinimum已经过时。现在,当我创建一个面向.NET Framework 4.0的C ++ / CLR项目时,该行将自动添加到自动生成的AssemblyInfo.cpp中:

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

这个项目完美编译,但是我应该在C#.NETFX 4.0项目中编写C#等价物,它不会编译。你知道我在哪里可以找到有关这方面的信息吗?

2 个答案:

答案 0 :(得分:2)

这不是新的,在以前版本的Visual Studio中添加了相同的属性。他们只是没有更改项目模板。它是一个CAS属性,基本上说“我至少需要运行非托管代码的最小权限”。

哪个合适,C ++ / CLI应用程序始终需要该权限。即使您编写纯代码,仍然需要非托管代码权限来初始化CRT。该权限仅适用于沙盒方案,其中代码不能以完全信任方式运行,例如在Web浏览器或安全插件设置中。 CAS确实已被弃用但未删除。不太清楚.NET 4.0现在发生了什么。这种情况与CAS被淘汰有关,这是无效的,因为像我这样的普通乔很难理解。

Shawn Farkas的博客是有关此信息的最佳来源。他是微软的.NET安全大师。

它的C#版本大致相同:

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

不确定为什么需要它,C ++ / CLI程序集请求它就足够了。

答案 1 :(得分:1)

我怀疑这是因为IDE做出了“最佳猜测”,C ++ / CLI代码通常需要调用本机C ++代码。

我在(非常小的)C ++ / CLI VS2010 Express项目上将此设置更改为“false”,我的所有托管应用程序仍然运行正常。