如何确定程序集是从f#项目编译的?

问题描述

c#和f#程序集之间有什么区别?可能有一些标志?我只想使用反射API来确定它

解决方法

没有一个单一的价值可以告诉您您需要什么,但是有大量的间接证据可以帮助您了解-IlSpy是您的朋友,如果您想探索它。

我建议您检查是否存在这两个指示符,除非这两个指示符中的任何一个存在,否则您可能正在查看F#程序集,除非有人真正致力于为您解决问题。

    组件上的
  • FSharpInterfaceDataVersionAttribute。这是我最初的建议,但是设置了一些编译器标记,这些标记将阻止发出此属性:--standalone--nointerfacedata。我发现这两种方法中的任何一种都将在该领域中普遍使用是令人怀疑的,但事实是仍然存在公开选择退出当前发出的属性的方法。

    asm.GetCustomAttribute(typeof(FSharpInterfaceDataVersionAttribute))
    
  • 存在StartupCode类型。它们是F#编译器如何编译某些构造的人工产物,似乎它们甚至是空的,因此它们应该高度可靠。

    asm.GetTypes().Where(fun x -> x.FullName.StartsWith("<StartupCode$"))
    

尤其要寻找对FSharp.Core的引用不是一个好主意,因为如果您使用的是混合解决方案,那么C#项目中也会经常引用它(并且没有阻止任何人获取它的方法)否)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...