如何解决如何确定程序集是从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#项目中也会经常引用它(并且没有阻止任何人获取它的方法)否)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。