我正在寻找在我的DLL中包含一个函数,该函数给出构建时间或自动构建编号。虽然有大量的C#示例,但我还没有看到任何F#。如果可能的话,我希望没有外部包或C#图层。在F中构建数字#
Q
在F中构建数字#
3
A
回答
2
最后修改
下面将告诉你函数所在的装配的最后修改时间
let lastModified() =
System.Reflection.Assembly.GetExecutingAssembly().Location
|> System.IO.File.GetLastWriteTime
版本
要获取版本号,你首先必须将它添加到F#程序中(它不在默认模板中)。将其添加到项目中的F#源文件(例如Assemblyinfo.fs)
module AssemblyInfo
open System.Reflection
[<assembly: AssemblyVersion("1.0.*")>]
()
但是请注意,版本1.0。*在C#(2010)中不起作用,它只会自动递增次要版本而不是修订版本。 1.0.0。*增加了修订版本,但不是次要版本。
然后你可以如下阅读组装版本:
let version() =
System.Reflection.Assembly
.GetExecutingAssembly()
.GetName()
.Version
2
在这里,你去。我移植了代码here:
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代码轻松访问它。
相关问题
- 1. F#构造函数
- 2. F#工作流构建Rx之中
- 3. 在Mac上构建F#.fsproj(单声道)
- 4. 在网络中构建数据字典
- 5. F中没有构造函数的类#
- 6. F#中的构造函数xml文档?
- 7. F#中的重写构造函数#
- 8. F#中的通用构造函数#
- 9. Xbuild构建面向.NET 3.5的F#3
- 10. TeamCity无法构建F#项目
- 11. 构建三级深F-绑定类型
- 12. 是否有F#事件的构建器?
- 13. 在F#中实现构建器模式(a System.Text.StringBuilder)
- 14. 在F中构建列表时类型不匹配#
- 15. 结构在NXC和F#
- 16. 如何在(功能性)F#中创建递归数据结构值?
- 17. F#创建二维数组
- 18. 如何在构造函数被调用之前初始化F#中的字段?
- 19. 我可以将参数传递给F#FAKE构建脚本吗?
- 20. 在R中构建函数
- 21. 在jquery中构建数组
- 22. 从JSON构建大数字
- 23. 局部解构(F#)
- 24. F#发现结构
- 25. 如何在Scala中实现OCaml/F#的“函数”构造?
- 26. 在f中找不到方法或对象构造函数#
- 27. F#报价,阵列和在构造函数中自我标识
- 28. 浮点数字中的“f”后缀
- 29. 在Ruby中将0-F字符串转换为字节数组
- 30. F#“构造函数的值...未定义”