Это началось как способ найти сборки С++/CLI и Managed С++, чтобы все классы, внутренние для них, могли быть протестированы, чтобы обеспечить повторное выполнение всех унаследованных методов. Я хотел бы добавить это как шаг процесса сборки, чтобы гарантировать, что это никогда не повторится.
Размышление об этой проблеме также сделало меня немного любопытным, поскольку было бы интересно уметь определять любой используемый язык .NET. Из-за этого я пошел немного дальше и сравнил сборки со всех языков .NET. Пока что я нашел через небольшую программу, которую я написал, которая сравнивает данные типа и атрибута с любым набором .NET-сборок через отражение:
- С# - имеет атрибут AssemblyConfigurationAttribute, имеет GuidAttribute
- VB - имеет много дополнительных типов "Мой" (например, MyApplication, MySettings), имеет GuidAttibute
- F # - имеет FSharpInterfaceDataVersionAttribute, который также указывает версию используемого компилятора.
- С++ (все, кроме /clr: safe) - содержит множество дополнительных типов (FrameInfo, type_info)
- С++/clr: safe - Кажется, нет уникальных функций отражения.
Возможно, было бы разумно разобрать в этом порядке:
- Это F #, если у него есть FSharpInterfaceDataVersionAttribute
- Это С++, если он есть в огромном наборе дополнительных типов, которые я нашел.
- Это VB, если у него есть типы "My *".
- Это С#, если у него есть AssemblyConfigurationAttribute или GuidAttribute
- Вероятно, это С++/clr: Safe
Однако, поскольку это ужасный взлом, я хотел зарегистрироваться здесь, чтобы убедиться, что не существует другой опции.