什么是F#的FSharp.Core.optdata和FSharp.Core.sigdata文件?

dev*_*ium 24 .net f#

这两个文件似乎都与FSharp.Core.dll一起驻留在F#的目录中.如果忘记将它们与FSharp.Core.dll放在一起,这两个文件似乎都是一个常见的麻烦来源.它们似乎是二进制文件,所以我无法揭示其目的.

我搜索了两个文件,但似乎没有一个明确的答案我的问题.那么......他们在F#中的功能是什么?

7sh*_*rp9 17

Optdata绝对是优化数据,它是作为EncodeOptimizationData编译器中函数的一部分编写的. FSharp.Core将此信息存储在外部文件中,而不是嵌入在资源清单中.

sigdata使用EncodeInterfaceData并包含有关F#类型的签名/接口的信息. FSharp.Core,FSharp.Compiler.Silverlight并且FSharp.LanguageService.Compiler所有这些信息都存储在外部文件中,而不是嵌入在资源清单中.

由于FSharp.Core在资源清单中不包含其中任何一个,因此它们必须存在于外部,但我不确定这个原因.

用户生成的F#文件在编译时将此信息编码到资源清单中,如果查看元数据,可以看到这一点.

  • 对.换句话说,`SigData`和`OptData`总是被编译成F#程序集作为托管资源,除非你指定一个像`--nooptimizationdata`这样的标志.我不知道为什么,但是`FSharp.Core`将这些资源转储到外部文件中(`FSharp.Core.sigdata`和`FSharp.Core.optdata`); 当您尝试编译引用另一个F#程序集的F#项目(例如,`FSharp.Core`)时,F#编译器需要该信息 - 如果它没有作为托管资源嵌入到引用的程序集中,它会查找外部文件.如果找不到,则编译失败并显示错误. (2认同)