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.* 功能时的主要问题。它给出任意增量值。并且包输出没有排序。
我现在应该怎么做?现在我需要使用“修订时间”字段...您能帮忙吗?
编辑,如果 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)
生成的结果将是这样的: