F# 在.NET core的.fsproj中指定程序集版本

F# 在.NET core的.fsproj中指定程序集版本,f#,.net-core,F#,.net Core,我试图在.NET core(2.0)控制台应用程序中指定程序集版本,以便通过以下方式以编程方式访问它: open System.Reflection let main argv = printfn "Assembly Version is: %s" <| Assembly.GetEntryAssembly().GetName().Version.ToString() 0 开放系统。反射 让主argv= printfn.fsproj文件的“程序集版本为:%s”文档 我相信

我试图在.NET core(2.0)控制台应用程序中指定程序集版本,以便通过以下方式以编程方式访问它:

open System.Reflection

let main argv =
    printfn "Assembly Version is: %s" <| Assembly.GetEntryAssembly().GetName().Version.ToString()
    0
开放系统。反射
让主argv=
printfn
.fsproj
文件的“程序集版本为:%s”文档 我相信就MSBuild而言,格式与csproj相同

您可以在此处找到有关csproj文件的官方文档:


程序集版本号 要获取程序集的“版本”,应注意有几种类型的版本:


  • 格式为major.minor.build.revision的数值(例如,2.4.0.0)。公共语言运行库使用此值在强名称程序集中执行绑定操作。
    注意:如果未将
    AssemblyInformationalVersionAttribute
    属性应用于程序集,则
    AssemblyVersionAttribute
    属性指定的版本号将由
    应用程序.ProductVersion
    应用程序.UserAppDataPath
    使用,和
    Application.UserAppDataRegistry
    properties


  • 指定Win32文件版本号的字符串值。这通常默认为程序集版本


  • 字符串值,指定公共语言运行时未使用的版本信息,例如完整的产品版本号。
    注意:如果此属性应用于程序集,则可以在运行时使用
    应用程序.ProductVersion
    属性获取它指定的字符串。字符串还用于
    应用程序.UserAppDataPath
    应用程序.UserAppDataRegistry
    属性提供的路径和注册表项


  • 定义程序集清单的其他版本信息

您可以在上更详细地了解每一项,也可以阅读:


从引用的程序集获取不同版本 请注意,上面的代码片段取自


直接解析
.fsproj
文件 还可以选择仅使用XML解析
fsproj
文件。此选项用于以编程方式添加引用或只是检查文件——所以它可能不适用于您的问题,但在这里是为了答案的完整性

//using System.Xml.Linq

XDocument.Load(path).Descendants("PropertyGroup").Elements("Version").Single().Value;

这里有一个问题:


简而言之,它应该可以工作,但现在不行。

输出(bin)文件夹中没有fsproj文件,因此无法解析。@IvanMilosavljevic-我可能误读了OP,我以为他想解析该文件。我相应地更新了答案,谢谢你的提示。谢谢你的回答,很遗憾,在.fsproj文件中设置AssemblyVersion属性对调用Assembly.GetExecutionGassembly().GetName().Version.ToString()时得到的值没有影响(我总是得到“0.0.0.0”)。。。我猜这是一个bug?@Svek
FileVersionInfo.GetVersionInfo(Assembly.getexecutinggassembly‌​()位置)。文件服务器‌​仅返回一个空字符串(在我的.fsproj文件中,我为
AssemblyVersion
FileVersion
Version
)设置了属性)即可用于.net sdk 2.2.100或更高版本
// assembly version
Assembly.GetExecutingAssembly().GetName().Version.ToString();

// assembly version - by path
Assembly.LoadFile('your assembly file').GetName().Version.ToString();

// file version  **this is likely what you are seeking**
FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;

// product version
FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
//using System.Xml.Linq

XDocument.Load(path).Descendants("PropertyGroup").Elements("Version").Single().Value;