c# - 编译 C# 不安全代码

标签 c# .net compiler-construction unsafe

我有一个带有一些不安全方法的小型 C# 类。有没有一种方法可以在 C# 源代码中以声明方式指定“/unsafe”选项(使用 #pragma 或其他任何方式)仅用于类源文件的上下文?我不想为这么小的类创建一个单独的程序集,但我也真的不希望为不安全代码启用程序集的其余部分(该类当前是其中的一部分)。

最佳答案

不,这(目前)是不可能的,因为整个程序集都会受到不安全代码的影响。

通过在您的程序集中包含不安全代码,您是在告诉 CLR 该程序集可以做一些不安全的事情,这会改变运行时在加载程序集时的行为方式。这里最大的变化是 CLR 不会尝试验证您的不安全代码,但它也会拒绝加载您的程序集,除非它具有完全信任(例如,您无法作为普通用户通过单击加载不安全程序集-一次。)

从技术角度来看,当您使用 /unsafe 选项时,它会导致编译器将以下模块级属性的 IL 等效项发送到您的程序集中:

[assembly:SecurityPermission(SkipVerification = true)]
[assembly:UnverifiableCode]

正如您所说,您最好的选择是尽可能将不安全代码隔离到它自己的单独程序集中。程序集中只有一个类这一事实比由于一个不安全的类而污染整个装满安全代码的程序集要少得多。

关于c# - 编译 C# 不安全代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986333/

相关文章:

java - Java Bootstrapped 的编译器?

c# - 如何将图像文件读取到 byte[]?

c# - 网络API : How can I push processing off so that the requester isn't hanging around for a response?

.net - NLog 控制台单行日志记录

c# - 如何使用 .NET NEST 客户端在函数评分查询中创建过滤器

.net - IntPtr、SafeHandle 和 HandleRef - 解释

c# - 将 IEnumerable<T> 转换为 List<SelectListItem> 的 Lambda 扩展方法

c# - 是否足以禁止输入中的单引号以避免 SQL 注入(inject)?

java - Java如何将字符串编码成字节码?

macos - Qt5 "symbol(s) not found for architecture x86_64"