如何在 Visual Studio 2022 中使用日期/时间更改 AssemblyInfo.cs AssemblyVersion 并每天将修订版本递增 1

nic*_*eek 4 .net c# versioning datetime .net-assembly

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

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

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

那么,这里是否可以使用任何 5 位数的小时/分钟/秒样式?或者也许是有意义的特殊 5 位数字勾号。

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

DLL

我现在应该怎么做?现在我需要使用“修订时间”字段...您能帮忙吗?

编辑,如果 5 位数字样式不适用于上述情况。我发现文章增量修改一。但它非常非常古老并且使用 JavaScript! https://www.codeproject.com/Tips/161923/Incrementing-AssemblyVersion-revision-number-on-ea

还有一个问题没有得到解答,这个问题仍然是新的, 我想为 Visual Studio 中的每个构建增加构建修订版本

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

编辑: 在 VS 市场中唯一执行此操作的扩展未更新到 Visual Studio 2022 或者他们可能不支持它,我尝试提供以下解决方案:

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

nic*_*eek 10

我希望他们更新VS 市场中的扩展

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

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

<!-- 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>
Run Code Online (Sandbox Code Playgroud)

生成的结果将是这样的:

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

每日增量

  1. 第二天再次从 1 开始递增: 第二天再从 1 开始递增