我有一个带有一些不安全方法的小型 C# 类。有没有办法在 C# 源代码(使用 #pragma
或其他任何方式)中以声明方式为类的源文件的上下文指定“/unsafe”选项?我不想为这样一个小类创建一个单独的程序集,但我也真的不希望为不安全代码启用程序集的其余部分(该类目前是其中的一部分)。
最佳答案
不,这是(目前)不可能的,因为整个程序集都受到其中包含不安全代码的影响。
通过在你的程序集中包含不安全的代码,你告诉 CLR 程序集可能会做一些不安全的事情,这会改变运行时加载程序集时的行为方式。这里最大的变化是 CLR 不会尝试验证您的不安全代码,但它也将拒绝加载您的程序集,除非它具有完全信任(例如,您无法以普通用户的身份通过单击加载不安全程序集 -一次。)
从技术角度来看,当您使用 /unsafe
选项时,它会导致编译器将以下模块级属性的 IL 等效项发送到您的程序集中:
[assembly:SecurityPermission(SkipVerification = true)]
[assembly:UnverifiableCode]
正如您所说,您最好的选择是尽可能将不安全的代码隔离到它自己的单独程序集中。程序集中只有一个类这一事实比由于一个不安全类而污染充满安全代码的整个程序集要少得多。