首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET程序集是否可以独立于它可能引用的任何其他程序集进行验证?

.NET程序集是否可以独立于它可能引用的任何其他程序集进行验证?
EN

Stack Overflow用户
提问于 2011-11-13 17:17:18
回答 1查看 463关注 0票数 4

换句话说:对于要验证的.NET程序集,是否还需要读取和分析任何引用的程序集?PEVerify工具是做什么的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-13 17:50:48

简短回答:是的,PEVerify需要加载引用的程序集。

汇编格式是非常独立的。但是确实有一些东西是PEVerify需要在引用的程序集中检查的。

泛型实例

在程序集中,当您使用泛型类型或泛型方法时,不会保留原始泛型,您必须加载类型或方法的定义以正确地验证实例化(实例化是否具有适当数量的泛型参数?)对于约束(泛型参数是否满足泛型参数上指定的泛型约束?)。如果PEVerify找不到引用的程序集,则验证将失败。

引用的成员可访问性

如果您调用方法或操作在另一个程序集中定义的字段,PEVerify将尝试加载定义该成员的程序集,以检查该成员是否具有适当的可见性。

如果找不到程序集,它将无法验证,否则将出现“Unable to resolve token”错误。

在其他几种情况下,要正确读取元数据,您必须解析对类型的引用,从而加载其包含程序集,但我不认为PEVerify会检查它们:

包含枚举的自定义属性实例化:

例如:

AttributeUsage (AttributeTargets.Field)

您必须加载AttributeTargets的定义,才能知道它是由序列化的自定义属性表单中跨越4个字节的int32支持的。

值以二进制形式序列化的字段:

一些编译器可能决定将常量值以二进制形式存储在程序集中。在常量的类型不是已知原语的情况下,您必须解析对此类型的引用才能知道其大小。

但话又说回来,我不认为PEVerify会检查这些情况。实际上我很确定它不会检查自定义属性的编码,对于第二个项目,我不是很确定。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8110677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档