簡體   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