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