是否可以确定.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%肯定)

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...