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++声明了很多我可以检测到的"自我使用"类型.所以这是"一种方式".我知道这不容易出错.并且会有一些错误的案例.那有什么更好的吗?
.NET没有做出这种区分,你也没有很好的理由.
唯一的方法是分析使用的类型和代码模式.例如,VB项目经常将一组不同的程序集引用到C#.
如果您需要为自己的程序集执行此操作,我建议您创建一个自定义Attribute类并使用它来装饰程序集.
阅读使用了编程语言的Decompiled assembly..NET程序集中没有用于记录源语言的工具.此外,不仅有.NET的C#,F#和VB.NET编译器,而且还有许多其他编译器(请参阅http://en.wikipedia.org/wiki/List_of_CLI_languages以了解该编号).最后,IL可能是直接编写的,而不是通过编译器编写的.
您可以尝试在IL中搜索模式以尝试编写源语言,但是如果它非常容易出错.我不确定它会带来什么好处.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |