【问题标题】:How to Change AssemblyInfo.cs AssemblyVersion with date/time and increment revision daily by one in Visual Studio 2022如何在 Visual Studio 2022 中使用日期/时间更改 AssemblyInfo.cs AssemblyVersion 并每天将修订增加一
【发布时间】:2022-02-21 06:42:32
【问题描述】:

经过挖掘和搜索。我发现AssemblyVersion 只接受System.Int16 这意味着它不能超过65,535 的值。

我需要的输出*.DLL 程序集版本样式(YYYY.M.D.HHMMSS)(2022.02.20.060920)

实际上第二部分第一个零会省略060920 是60920,如果小时是15 = 3 PM,应该是150920 = 6 位数。不起作用。我想有一种方法 DateTime.Now.Ticks 但它给出了 System.Int64 并且永远不会适用于 Version

请问有没有 5 位 小时/分钟/秒 样式可以在这里使用?或者可能是有意义的特殊 5 位刻度。

当我使用 Visual Studio 自动增量修订版 1.0.0.* 功能时的主要问题。它给出任意增量值。并且包输出没有排序。

我现在该怎么办?现在我需要使用 Time for revision 字段...你能帮忙吗?

编辑, 如果上述 5 位样式不可用。我发现文章增加了一个修订。但它非常古老并且使用 JavaScript! https://www.codeproject.com/Tips/161923/Incrementing-AssemblyVersion-revision-number-on-ea

还有一个问题没有回答哪个还是新的I would like to increment the build revision version for every build in visual studio

我得到了以下代码,它获得了版本 2022.02.20.Revision(在 MSDN 限制为大值午夜 * 2 期间,修订是无用的。

编辑: 在 VS 市场中唯一的 extension 没有更新到 Visual Studio 2022 或者他们可能不支持它时,我尝试在下面给出解决方案:

(如果您有更好的方法,请随时修改答案)

【问题讨论】:

  • 包输出没有排序怎么办?文件名按降序排列,时间列按(或看起来)按降序排列。
  • 是的,它是有序的,但它的修订号毫无意义。是否有任何 5 位数的小时/分钟/秒样式可以使用。或者如何让它每天增加?例如第 20 天修订从 1、2、3、4 等开始。第 21 天从 1、2、3.. 开始。
  • 一天有 86,400 秒,因此您可以使用这 5 位数字将时间存储为从午夜开始的秒数。我认为生成的数字不会比其他数字更不透明,否则您可能会将 6 位数字编码为 5 位数字。另外,您真的希望在同一分钟内创建多个构建吗?也许您可以将其存储为seconds / 10seconds / 12。密切相关:How to use release date as assembly version for a .net project?Creating a revision number from date/time

标签: c# .net datetime .net-assembly versioning


【解决方案1】:

我希望他们在 VS 市场中更新 extension

但无论如何,这里的解决方案是生成带有(年、月、日、增量每日)的版本

此代码必须在*.csproj 文件中</project> 标记的关闭之前插入

<!-- Change AssemblyInfo.cs AssemblyVersion with date/time and increment revision daily by one in Visual Studio 2022 -->
<Target Name="AssemblyVersion" BeforeTargets="CoreCompile" DependsOnTargets="PrepareForBuild">
    <PropertyGroup>
        <!-- Define Constants -->
        <AssemblyInfo>Properties\AssemblyInfo.cs</AssemblyInfo>
        <AssemblyInfoContent>$([System.IO.File]::ReadAllText($(AssemblyInfo)))</AssemblyInfoContent>
        <VersionRegex>(\[\s*assembly\s*:\s*AssemblyVersion\(\s*"(\d+)\.(\d+)\.(\d+)(\.)(\d+)("\)\s*\]))</VersionRegex>
        <BuildAndRevisionRegex>(\d+\.\d+")</BuildAndRevisionRegex>

        <!-- Parse Build and Revision from AssemblyInfo-->
        <AssemblyVersion>$([System.Text.RegularExpressions.Regex]::Match('$(AssemblyInfoContent)', '$(VersionRegex)'))</AssemblyVersion>
        <BuildAndRevision>$([System.Text.RegularExpressions.Regex]::Match('$(AssemblyVersion)', '$(BuildAndRevisionRegex)'))</BuildAndRevision>
        <BuildAndRevision>$(BuildAndRevision.Remove($(BuildAndRevision.LastIndexOf('"')), 1))</BuildAndRevision>
        
        <!-- Generate Build and Revision from AssemblyVersion -->
        <Build>$(BuildAndRevision.SubString(0, $(BuildAndRevision.LastIndexOf('.'))))</Build>
        <Revision>$(BuildAndRevision.SubString($([MSBuild]::Add($(BuildAndRevision.LastIndexOf('.')), 1))))</Revision>
        
        <!-- Increment Revision by one if Build equal Current Day otherwise start from one as new Day Build-->
        <Revision Condition ="$([System.DateTime]::Now.Day) == $(Build)">$([MSBuild]::Add($(Revision), 1))</Revision>
        <Revision Condition ="$([System.DateTime]::Now.Day) != $(Build)">1</Revision>

        <!-- New AssemblyVersion Block -->
        <AssemblyVersion>[assembly: AssemblyVersion("$([System.DateTime]::Now.ToString("yyyy.M.d.$(Revision)"))")]</AssemblyVersion>
    </PropertyGroup>

    <!-- Write New AssemblyVersion Block to AssemblyInfo.cs file -->
    <WriteLinesToFile File="$(AssemblyInfo)" Lines="$([System.Text.RegularExpressions.Regex]::Replace($(AssemblyInfoContent), $(VersionRegex), $(AssemblyVersion)))" Overwrite="true" />
</Target>

生成的结果是这样的:

  1. 图书馆/项目的每一天都将从(年、月、日、日增量)开始

  1. 次日从一开始递增:

【讨论】:

猜你喜欢
  • 2011-03-15
  • 2023-01-04
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
相关资源
最近更新 更多