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

C# 如何确定该程序集是从f#项目编译的?,c#,.net,f#,.net-assembly,C#,.net,F#,.net Assembly,c#和f#组件之间有什么区别?也许是国旗?我只想使用反射API来确定它没有一个单独的值可以检查,它可以告诉您需要什么,但是有大量的环境证据,您可以查看-如果您想探索它,IlSpy是您的朋友 我建议你检查这两个指标是否存在,它们中的任何一个出现都意味着你很可能在看一个F#大会,除非有人真的专门为你把事情搞砸了 FSharpInterfaceDataVersionAttribute在部件上。这是我最初的建议,但是有一些编译器标志在设置时会阻止该属性被发出:--standalone和--nointe

c#和f#组件之间有什么区别?也许是国旗?我只想使用反射API来确定它

没有一个单独的值可以检查,它可以告诉您需要什么,但是有大量的环境证据,您可以查看-如果您想探索它,IlSpy是您的朋友

我建议你检查这两个指标是否存在,它们中的任何一个出现都意味着你很可能在看一个F#大会,除非有人真的专门为你把事情搞砸了

  • FSharpInterfaceDataVersionAttribute
    在部件上。这是我最初的建议,但是有一些编译器标志在设置时会阻止该属性被发出:
    --standalone
    --nointerfacedata
    。我发现这两种方法中的任何一种都很难在该领域中普遍使用,但事实是,现在仍然有公开的方法可以选择不使用正在发出的属性

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

    asm.GetTypes().Where(fun x -> x.FullName.StartsWith("<StartupCode$"))
    
    asm.GetTypes().Where(fun x->x.FullName.StartsWith(“可能
    Assembly.LoadFile(path).getReferenceAssemblys().Any(a=>a.Name==“FSharp.Core”)
    作为prolly F#库将具有这样的依赖关系或
    Assembly.GetTypes().Any(t=>t.FullName.StartsWith()