Esto comenzó como una forma de encontrar C++/CLI y ensamblados administrados de C++ para que todas las clases internas a ellos pudieran ser probadas para asegurar que todos los métodos heredados fueran reimplementados. Me gustaría agregar esto como un paso del proceso de compilación para garantizar que nunca vuelva a suceder.¿Es posible determinar en qué idioma se escribió un ensamblado .NET ex post facto?
Pensar en este problema también me hizo un poco curioso, ya que sería interesante poder determinar cualquier lenguaje .NET utilizado. Debido a esto, fui un poco más allá y comparé ensamblados de todos los lenguajes de .NET. Hasta el momento esto es lo que he encontrado a través de un pequeño programa que escribí que se compara el tipo de atributos y datos de cualquier conjunto de ensamblados .NET a través de la reflexión:
- C# - Tiene AssemblyConfigurationAttribute, Tiene GuidAttribute
- VB - Tiene muchos "Mi" tipo extra (por ejemplo MyApplication, MySettings), tiene GuidAttibute
- F # - Tiene un FSharpInterfaceDataVersionAttribute que también especifica la versión del compilador utilizado.
- C++ (all but/clr: safe) - Tiene un montón de tipos adicionales (FrameInfo, type_info)
- C++/clr: safe - Parece que no tiene características de reflexión únicas.
podría ser razonable para analizar en este orden:
- Es F # si tiene el FSharpInterfaceDataVersionAttribute
- Es C++ si tiene alguna en el enorme conjunto de tipos adicionales que encontré.
- Es VB si tiene los tipos "Mi *".
- Es C# si tiene AssemblyConfigurationAttribute o GuidAttribute
- Es probable que sea C++/CLR: Segura
Sin embargo, como este es un horrible truco, quería comprobar aquí para asegurarse de que no wasn es otra opción disponible.
Pregunta interesante, pero ¿por qué el uso del latín? Retrospectivamente sería más fácil de entender. No todos aquí son hablantes nativos de inglés. – danio
@danio: Porque el latín es increíble? – bcat