c# - 如何确定该程序集是从 f# 项目编译而来的?

标签 c# .net f# .net-assembly

c# 和 f# 程序集有什么区别?也许是一些旗帜?我只想使用反射 API 来确定它

最佳答案

没有单一的值可以告诉您需要什么,但是有大量的间接证据可供您查看 - 如果您想探索它,IlSpy 是您的 friend 。

我建议您检查这两个指标是否存在,其中任何一个都存在意味着您可能正在查看 F# 程序集,除非有人真的致力于为您搞砸。

  • FSharpInterfaceDataVersionAttribute 在程序集上。这是我最初的建议,但是有一些编译器标志在设置时会阻止发出此属性:--standalone--nointerfacedata。我发现非常怀疑它们中的任何一个是否会在该领域中普遍使用,但事实仍然是有公开可用的方法来选择退出现在发出的属性。

    asm.GetCustomAttribute(typeof(FSharpInterfaceDataVersionAttribute))
    
  • StartupCode 类型的存在。它们是 F# 编译器编译某些结构的产物,而且看起来它们甚至是空的,因此它们应该是高度可靠的。

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

特别是寻找对 FSharp.Core 的引用并不是一个好主意,因为如果您正在使用混合解决方案,它通常也会从 C# 项目中引用(并且没有什么可以阻止任何人都可以从 nuget 中获取它)。

关于c# - 如何确定该程序集是从 f# 项目编译而来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63847374/

相关文章:

.net - 我可以在 powershell 中执行此操作吗?读取注册表,将二进制内容写入文件

c# - 在方法中重写时的数组参数不会在其外部更改

c# - 从 C# 终结器调用静态方法

f# - 使用 leftOuterJoin,不需要 .DefaultIfEmpty()

reflection - 向上转换通过反射创建的 F# 记录

c# - ColorTranslator.ToHtml() 返回字符串问题

c# - "Only catch exceptions you can handle"到底是什么意思?

c# - 在 MVC3 应用程序的编辑操作方法中使用 AutoMapper

c# - 如何将文件和 json 对象从 postman 传递到 asp.net 核心 webapi

f# - 尾递归函数的 System.OutOfMemoryException