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