F# 在.NET core的.fsproj中指定程序集版本
我试图在.NET core(2.0)控制台应用程序中指定程序集版本,以便通过以下方式以编程方式访问它: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”文档 我相信
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?@SvekFileVersionInfo.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;