动态版本控制
本文关键字:版本控制 动态 | 更新日期: 2023-09-27 17:50:59
我有一种情况,我希望版本控制在构建时是动态的。
版本模式:<year>.<month>.<day>.<hhmm>
但是我已经读到在属性中使用的字符串值在编译时被解析的地方。
关于如何完成这个动态版本控制有什么建议吗?理想情况:
<Assembly: AssemblyVersion("4.0.0.0")>
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))>
您可以使用MsbuildCommunityTasks来生成构建号,并自定义构建前的程序集文件版本。
-
在MsbuildCommunityTasks下载zip
-
解压到文件夹[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….创建AssemblyInfo文件"Properties'AssemblyVersionInfo.cs".
(…)
AfterBuild:
删除文件"Properties'AssemblyVersionInfo.cs".
如果你想用更少的msbuild代码对许多项目这样做,就有必要创建一个自定义的构建脚本来封装你的解决方案。