Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用SupersMessage代替SecurityCritical(在某些情况下)?_C#_.net - Fatal编程技术网

C# 是否可以使用SupersMessage代替SecurityCritical(在某些情况下)?

C# 是否可以使用SupersMessage代替SecurityCritical(在某些情况下)?,c#,.net,C#,.net,我正在编写我自己的ComTypes.IStream的托管实现,我发现了几个关于如何实现的示例,但我注意到,在一些示例中使用了SecurityCritical属性,而在另一个示例中使用了supersmessage 我已经阅读了关于这两个属性的MSDC文档,我的理解是SupersMessage只会抑制一个特定的警告/错误/任何东西,而SecurityCritical将抑制所有这些属性(除了不要求任何类型的权限-我不需要)。有点像你如何捕捉一个特定的异常,或者你如何放置一个catch-all块 考虑到

我正在编写我自己的ComTypes.IStream的托管实现,我发现了几个关于如何实现的示例,但我注意到,在一些示例中使用了SecurityCritical属性,而在另一个示例中使用了supersmessage

我已经阅读了关于这两个属性的MSDC文档,我的理解是SupersMessage只会抑制一个特定的警告/错误/任何东西,而SecurityCritical将抑制所有这些属性(除了不要求任何类型的权限-我不需要)。有点像你如何捕捉一个特定的异常,或者你如何放置一个catch-all块

考虑到这一点,在我看来,如果我知道Suppress有哪些警告/错误,那么无论我使用SecurityCritical还是SuppressMessage实际上都是一样的。我也明白,在这种情况下使用SecurityCritical与使用电钻引爆气球是一样的


我的假设是正确的,还是我误解了什么?

这些属性完全不相关
SuppressMessage
告诉分析器对可能违反规则的内容保持沉默
SecurityCritical
将成员标记为执行安全关键的操作。前者根本没有运行时影响,后者有(至少在代码访问安全有效时)。根据analyzer规则的编写方式,添加
SecurityCritical
可能会跳过或满足特定规则,但这是一种次要影响,而不是它的实际用途。我已经看到在IStream Read and Write方法上加上该属性,并给出了理由“调用Marshal.WriteInt32,LinkDemands将指针作为输入”。现在,由于这些方法在没有SecurityCritical属性的情况下工作正常(即正在读取和写入流),可以安全地假设它根本不需要吗?只要代码在完全信任的情况下运行(这是目前代码的主要部分),就可以正常工作。如果您关心部分信任的代码能够使用程序集,那么您只需要正确地应用安全属性。(老实说,我个人从来没有这么做过。)这些属性是完全不相关的。
SuppressMessage
告诉分析程序对可能违反规则的内容保持沉默;
SecurityCritical
标记成员也在做安全关键的事情。前者根本没有运行时影响,后者则有(至少当代码访问安全性生效时)。根据analyzer规则的编写方式,添加SecurityCritical可能会跳过或满足特定规则,但这是一种次要影响,而不是其实际用途。我已经看到该属性放在IStream读写方法上,并带有理由“调用Marshal.WriteInt32,LinkDemands将指针作为输入”。现在,由于这些方法在没有SecurityCritical属性的情况下工作正常(即正在读取和写入流),可以安全地假设它根本不需要吗?只要代码在完全信任的情况下运行(这是目前代码的主要部分),就可以正常工作。如果您关心部分信任的代码能够使用程序集,那么您只需要正确地应用安全属性。(老实说,我个人从来没有这样做过。)