Dynamic Versioning

2019-08-05 23:09发布

我有一个情况我想要的版本是在构建时动态。

版本模式: <year>.<month>.<day>.<hhmm>

但我已阅读其中的属性使用的字符串值,在编译时重新解析。

关于如何得到这个动态版本完成任何建议?

理想的情况:

<Assembly: AssemblyVersion("4.0.0.0")> 
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))> 

我知道它不会工作,但应该明白了吧acrossed。

Answer 1:

您可以使用MsbuildCommunityTasks生成版本号和自定义的预构建的时间汇编文件版本。

  • 在下载的zip MsbuildCommunityTasks

  • 解压缩到文件夹[SolutionFolder] \ MsBuildExtensions \ MSBuildCommunityTasks

  • 下面添加您的项目(的csproj)的样品中,只是在Microsoft.CSharp.Targets进口。

  <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildThisFileDirectory)..\MsBuildExtensions\MSBuildCommunityTasks</MSBuildCommunityTasksPath>  
    <My-PropertiesDir>Properties</My-PropertiesDir>
  </PropertyGroup>
  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>
  <Target Name="BeforeBuild">
    <Time Format="yyyy.MM.dd.HHmm">
      <Output TaskParameter="FormattedTime" PropertyName="My-VersionNumber" />
    </Time>
    <Message Text="Building $(My-VersionNumber) ...">
    </Message>
    <ItemGroup>
      <My-AssemblyInfo Include="$(My-PropertiesDir)\AssemblyVersionInfo.cs" />
      <Compile Include="@(My-AssemblyInfo)" />
    </ItemGroup>
    <MakeDir Directories="$(My-PropertiesDir)" />
    <AssemblyInfo OutputFile="@(My-AssemblyInfo)"
          CodeLanguage="CS"
          AssemblyFileVersion="$(My-VersionNumber)"
          AssemblyInformationalVersion="$(My-VersionNumber)"
          Condition="$(My-VersionNumber) != '' "
          />
  </Target>
  <Target Name="AfterBuild">
    <Delete Files="@(My-AssemblyInfo)" />
  </Target>

  • 擦去你的AssemblyInfo.cs中的AssemblyFileVersion属性。 它将在构建时生成。

  • 你会看到被打印在控制台上的版本号,当您建立。 所生成的文件在AfterBuild目标中删除,以保持你的源代码控制干净。

    BeforeBuild:

    建立2013.01.14.1016 ...创建集信息文件“属性\ AssemblyVersionInfo.cs”。

    (......)

    AfterBuild:

    删除文件“属性\ AssemblyVersionInfo.cs”。

  • 如果你想用更少的MSBuild代码这样对很多项目,有必要创建一个定制的构建脚本来包裹你的解决方案。



文章来源: Dynamic Versioning