3

ビルド時刻または自動ビルド番号を提供する関数を DLL に含めようとしています。C# の例はたくさんありますが、F# の例はまだ見たことがありません。可能であれば、外部パッケージや C# レイヤーなしでこれを行いたいと考えています。

4

2 に答える 2

2

どうぞ。ここからコードを移植しました:

module MyModule

type BuildTime =
    static member RetrieveLinkerTimestamp() =
        let c_PeHeaderOffset = 60
        let c_LinkerTimestampOffset = 8
        let filePath = System.Reflection.Assembly.GetCallingAssembly().Location
        let b : byte array = Array.zeroCreate 2048
        use s = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
        s.Read(b, 0, 2048) |> ignore
        let i = System.BitConverter.ToInt32(b, c_PeHeaderOffset)
        let secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset)
        let dt = System.DateTime(1970, 1, 1, 0, 0, 0)
        let dt1 = dt.AddSeconds(float(secondsSince1970))
        dt1.AddHours(float(System.TimeZone.CurrentTimeZone.GetUtcOffset(dt1).Hours))

きれいではありませんが、機能します。他の .NET コードから簡単にアクセスできるように、型として記述しました。

于 2013-09-30T14:11:40.660 に答える