繁体   English   中英

如何从F#dll重建F#程序集签名

[英]How to reconstruct F# assembly signature from F# dll

我想从已编译的F#dll访问F#签名数据。

我知道可以使用FSharp.Compiler.Service库从源文件中获取签名数据。 我找不到使用该库从没有源的dll中生成签名信息的方法。

我看到两个选择,但我认为可能有一个更简单的解决方案。 我知道的两个选项是:

  1. 将F#源代码嵌入dll中,并使用FSharp.Compiler.Service从嵌入式资源中提取信息。 然后,我可以将名称对应中的反射元数据建立任何关联。 除非我做错了什么,否则FSharp.Compiler.Service无法解释.fsi签名文件,因此似乎需要嵌入整个源才能起作用。

  2. 从反射元数据重构F#签名。 由于某些数据无法通过反射(例如类型别名)进行恢复,因此该方法似乎不一定足够。

我的问题是:

是否有比我建议的更好的方法来访问F#签名数据并将其与反射元数据相关联?

解决这个问题的另一种方法可能是,“给出一个已编译的F#程序集,我如何确定所有可用于引用项目的类型别名(及其引用)?”

这实质上是F#格式库文档部分所做的。 它从已编译的DLL(以及XML注释)生成文档,但是关键部分是它从已编译的DLL加载有关F#代码的元数据。

它的工作方式是使用F#编译器服务来构建项目

它使用F#编译器服务来加载已编译的F#DLL(就像在编译某些代码时引用它一样)。 然后,F#编译器服务会看到有关DLL的所有信息,包括诸如别名之类的东西(这是F#编译器本身在引用DLL时所看到的!)

它的源代码在GitHub上-很好的起点是对这里的 FSharpAssembly.LoadFiles的调用,该文件读取稍后处理的元数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM