asp.net-core - MSBuild 输出不正确的 DateTime.UtcNow 格式
问题描述
对于我在 csproj 中的版本标签,我有以下内容:
<PropertyGroup>
<Version>
$([System.DateTime]::UtcNow.Year).$([System.DateTime]::UtcNow.ToString("MM")).$([System.DateTime]::UtcNow.ToString("dd")).$([System.DateTime]::UtcNow.ToString("HHmm"))
</Version>
</PropertyGroup>
但它的输出是这样的:Vysn.Voice.2020.1.9.309.nupkg
对于 nuget 包以及当我从程序集获取版本信息时:Assembly.GetExecutingAssembly().GetName().Version
。
但是当我这样做时
var assembly = Assembly.GetExecutingAssembly();
var informationalVersionAttribute = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
Console.WriteLine(informationalVersionAttribute.InformationalVersion);
它输出正确的 DateTime 字符串:2020.01.08.1018
. 我不确定我在指定版本时是否做错了,但我希望它正确输出版本:2020.MM.dd.HHmm
.
解决方案
但它的输出如下:Vysn.Voice.2020.1.9.309.nupkg for nuget packages
这是一种设计行为。
首先,
Vysn.Voice
就是所谓的包标识符,2020.1.9.309
就是包版本。正如官方文档所描述的:始终使用其包标识符和确切的版本号来引用特定包
- 默认情况下,包版本与
Version
. 因此,您可以通过自<Version/>
定义*.csproj
. 请注意包版本不会影响包标识符。 - 默认情况下,包标识符与文件中的元数据
<PackageId>Vysn.Voice</PackageId>
匹配*.csproj
。如果<PackageId/>
未指定或为空,它将使用AssemblyName
. 有关更多详细信息,请参阅包 ID。
- 默认情况下,包版本与
另外,请注意版本号
<Major>.<Minor>.<Build>
应该是Integer
. 并且当使用 打包项目时,版本号中NuGet
的前导零总是从、和部分中删除。所以你会得到,而不是得到。此处记录了此行为。Major
Minor
Build
2020.01.09
2020.1.9
最后,当你调用
assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
您实际上是在尝试获取与or
InformationalVersion
不同的。可能包含任何字符串。这与默认匹配,可能看起来像(注意会有一些前导零。)Version
PackageVersion
InformationalVersion
InformationalVersion
Version
2020.01.09.0704
推荐阅读
- css - 隐藏移动类
- spring - spring boot 2.4.3的依赖表
- javascript - 使用带有功能组件的 react-codemirror2
- linux - 带有“read”的“-r”标志是否会导致字符转义?
- bootstrap-4 - 如何使用 Bootstrap 4 将水平表单与提交按钮对齐?
- windows - 带有 NoBuffering 的 Haskell 跨平台 getChar
- azure - 在 Azure cosmosDB 帐户中禁用低于 1.2 的 TLS
- azure-devops - Azure DevOps - 具有多个看板的多个项目与具有多个存储库的单个项目
- java - Javafx:将 ImageView 绑定到 Anchorpane 或 VBox 并通过调整场景大小来缩放 ImageView
- r - 有效地为每一行在不同的 DataFrame 中找到值