【发布时间】:2012-01-09 21:33:25
【问题描述】:
如何将程序集标记为“安全”?
或者,当我的程序集中的某些东西不“安全”时,我如何让 Visual Studio 告诉我?
有时你不能使用一个程序集,除非它是“安全的”(例如from SQL Server)。
我希望我的程序集被标记为安全。如果我的程序集因为不安全而无法被标记为安全,我想知道如何知道我的程序集不安全。
Visual Studio 中有一些似乎与安全性相关的概念,它们可能与“安全”的程序集有关,也可能无关:
-
允许不安全代码汇编选项:
- 如果我选中允许不安全代码选项,允许什么?
- 如果我取消选中允许不安全代码选项,什么是不允许的?
-
“不安全代码”与“安全”程序集有什么关系(如果有)?
(我问是因为我的程序集不“允许不安全代码”,但允许 P/Invoke 调用 - 我认为这是“不安全”的定义)
-
ClsCompliant 组装选项:
[assembly: CLSCompliant(true)] namespace MyApplication- “符合 cls”的代码与“安全”的程序集有什么关系(如果有)?
-
不安全代码块:
int error; unsafe { error = 0x80004005; }unsafe块内的代码是“不安全的” -
Microsoft 建议创建一个名为
UnsafeNativeMethods的类,其中包含不安全的托管代码:[SuppressUnmanagedCodeSecurity] internal static class UnsafeNativeMethods { ... }这与
SafeNativeMethods形成鲜明对比:[SuppressUnmanagedCodeSecurity] internal static class SafeNativeMethods { ... }包含安全的本机方法,以及
NativeMethods:internal static class SafeNativeMethods { ... }包含本机方法。
如何将程序集标记为“安全”?
SQL 如何知道汇编是“不安全的”?
【问题讨论】:
-
SAFE在这种情况下是关于程序集 CAS 级别的。 MSDN 上有一篇非常好的文章,其中谈到了 designing assemblies for SQL Server 并详细说明了您的程序集的SAFEness。
标签: c# assemblies