这最初是一种查找 C++/CLI 和托管 C++ 程序集的方法,以便可以测试它们内部的所有类,以确保重新实现所有继承的方法。我想将其添加为构建过程步骤,以确保它不再发生。
思考这个问题也让我有点好奇,因为能够确定所使用的任何 .NET 语言会很有趣。因此,我进一步比较了所有 .NET 语言的程序集。到目前为止,我通过编写的一个小程序发现了以下内容,该程序通过反射比较任何 .NET 程序集集的类型和属性数据:
- C# - 具有 AssemblyConfigurationAttribute、具有 GuidAttribute
- VB - 有许多额外的“我的”类型(例如 MyApplication、MySettings),有 GuidAttibute
- F# - 具有 FSharpInterfaceDataVersionAttribute,它还指定所使用的编译器的版本。
- C++(除了 /clr:safe 之外的所有)- 有一堆额外的类型(FrameInfo、type_info)
- C++ /clr:safe - 似乎没有独特的反射功能。
按以下顺序解析可能是合理的:
- 如果具有 FSharpInterfaceDataVersionAttribute,则为 F#
- 如果我发现的大量额外类型中有的话,它就是 C++。
- 如果它具有“My*”类型,则它是 VB。
- 如果它具有 AssemblyConfigurationAttribute 或 GuidAttribute,则它是 C#
- 它可能是 C++ /clr:Safe
然而,由于这是一个可怕的黑客攻击,我想在这里检查一下以确保没有其他可用的选择。
检查 VB 或 F# 类库之类的引用似乎是最不可靠的方法,但正如其他人提到的,这是一种启发式方法 - 就像没有明确的方法来判断本机二进制文件是用哪种语言编写的一样(但是通过启发法你几乎可以 100% 确定)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)