微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以确定.NET程序集是以哪种语言编写的?

这是一种找到C/C++LI和Managed C程序集的方法,以便可以测试它们内部的所有类,以确保所有继承的方法都被重新实现.我想将其添加为构建流程步骤,以确保它不会再发生.

想到这个问题也让我有点好奇,因为能够确定所使用的任何.NET语言将是有趣的.因此,我进一步比较了所有.NET语言的程序集.到目前为止,这是通过我写的一个小程序发现的,它通过反射来比较来自任何一组.NET程序集的类型和属性数据:

> C# – 具有AssemblyConfigurationAttribute,具有GuidAttribute
> VB – 有很多额外的“我的”类型(例如MyApplication,MySettings),有GuidAttibute
> F# – 有一个FSharpInterfaceDataVersionAttribute,它还指定使用的编译器的版本.
> C(all / clr:safe) – 有一堆额外的类型(FrameInfo,type_info)
> C / clr:safe – 似乎没有独特的反射功能.

按照这个顺序解析可能是合理的:

>如果它有FSharpInterfaceDataVersionAttribute,它是F#
>如果它有任何在我发现的巨大的额外类型中是C.
>它是VB,如果它有“我的*”类型.
>它是C#如果它有AssemblyConfigurationAttribute或GuidAttribute
>可能是C/C++lr:安全

然而,由于这是一个可怕的黑客,我想在这里检查,以确保没有其他选项可用.

解决方法

检查VB或F#类库中的引用似乎是最不爽的方法,但是如其他人所说,它是一个启发式的 – 就像没有明确的方法来告诉本地二进制文件写入哪种语言(但是你可以通过启发式几乎100%肯定)

原文地址:https://www.jb51.cc/c/113745.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐