获取给定类型的编程语言

obe*_*iro 1 .net c# reflection

我引用了某些程序集的类型和类.

var type = typeof(SomeNamespace.SomeClass);
Run Code Online (Sandbox Code Playgroud)

有没有办法获得关于使用什么编程语言编写这个类的元数据?C#或VB或F#?

所以结果我想要这样的东西

var programmingLanguage = getLanguage(type); // C#
Run Code Online (Sandbox Code Playgroud)

UPD:

我可以分析用于此类的程序集或命名空间吗?也许这可以找到一种语言的线索?

UPD2:

到目前为止我可以使用它(这只是VB检测的一个例子)

var referenced = type.Assembly.GetReferencedAssemblies()
    .Where((r) => r.Name.Contains("VisualBasic"));
Run Code Online (Sandbox Code Playgroud)

VB添加了Microsoft.VisualBasic.F#还添加了它自己的程序集,C++声明了很多我可以检测到的"自我使用"类型.所以这是"一种方式".我知道这不容易出错.并且会有一些错误的案例.那有什么更好的吗?

Kie*_*one 9

.NET没有做出这种区分,你也没有很好的理由.

唯一的方法是分析使用的类型和代码模式.例如,VB项目经常将一组不同的程序集引用到C#.

如果您需要为自己的程序集执行此操作,我建议您创建一个自定义Attribute类并使用它来装饰程序集.


Dav*_*rno 5

阅读使用了编程语言Decompiled assembly..NET程序集中没有用于记录源语言的工具.此外,不仅有.NET的C#,F#和VB.NET编译器,而且还有许多其他编译器(请参阅http://en.wikipedia.org/wiki/List_of_CLI_languages以了解该编号).最后,IL可能是直接编写的,而不是通过编译器编写的.

您可以尝试在IL中搜索模式以尝试编写源语言,但是如果它非常容易出错.我不确定它会带来什么好处.

  • 正如你的问题所示,你没有遵循`C#`套管约定:`var programmingLanguage = getLanguage(type); // C#` 如果您不遵守惯例,我不会看到您如何通过查看惯例对语言进行排序. (2认同)