不,这是(目前)不可能的,因为整个程序集都受到不安全代码的影响.
通过在程序集中包含不安全的代码,您告诉CLR程序集可以执行某些操作,这是不安全的,这会更改运行时在加载程序集时的行为方式.这里最大的变化是CLR根本不会尝试验证您的不安全代码,但它也会拒绝加载您的程序集,除非它具有完全信任(例如,您无法像普通用户那样加载不安全的程序集 - 一旦.)
从技术角度来看,当您使用该/unsafe选项时,它会使编译器将以下模块级属性的IL等效项发送到程序集中:
[assembly:SecurityPermission(SkipVerification = true)]
[assembly:UnverifiableCode]
Run Code Online (Sandbox Code Playgroud)
正如您所说,您最好的选择是尽可能将不安全的代码隔离到自己独立的程序集中.由于一个不安全的类,装配体中只有一个类的事实远不如污染整个装配充满安全代码的装配.
C# 有一个unsafe关键字,您必须在不安全代码周围使用该关键字,以避免人们不小心使用不安全代码。这是我能想到的最好的方法:如果有人可以unsafe在文件中引入关键字,他们就可以轻松地添加或删除#pragma标签等。
该/unsafe编译器标签告诉编译器,你没事使用人unsafe关键字在本届大会上,和你认识到,组装它生成的将被标记为“不安全”,这可以防止它在低于完全信任的环境中运行. 没有办法让编译器只将单个类标记为不安全:人们可以信任您的程序集,也可以不信任。
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |