这最初是作为一种查找 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
然而,由于这是一个可怕的 hack,我想在这里检查以确保没有其他选项可用。