Gol*_*hop 8 c# vb.net assemblyfileversion
我有一种情况,我希望版本控制在构建时是动态的.
版本模式: <year>.<month>.<day>.<hhmm>
但我已经读过在编译时重新分析属性中使用的String值的位置.
有关如何完成动态版本控制的任何建议吗?
理想情况:
<Assembly: AssemblyVersion("4.0.0.0")>
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))>
Run Code Online (Sandbox Code Playgroud)
我知道它不会工作,但应该得到交叉点.
您可以使用MsbuildCommunityTasks生成内部版本号并在预构建时自定义程序集文件版本。
在MsbuildCommunityTasks下载 zip
解压到文件夹 [SolutionFolder]\MsBuildExtensions\MSBuildCommunityTasks
在 Microsoft.CSharp.Targets 导入之后,将以下示例添加到您的项目 (csproj) 中。
<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>
Run Code Online (Sandbox Code Playgroud)
从 AssemblyInfo.cs 中擦除 AssemblyFileVersion 属性。它将在构建时生成。
构建时,您将看到控制台上打印的版本号。生成的文件将在 AfterBuild 目标上删除,以保持源代码管理干净。
构建之前:
构建 2013.01.14.1016 ...创建了 AssemblyInfo 文件“Properties\AssemblyVersionInfo.cs”。
(...)
构建后:
正在删除文件“Properties\AssemblyVersionInfo.cs”。
如果您想使用更少的 msbuild 代码对许多项目执行此操作,则有必要创建一个自定义的构建脚本来包装您的解决方案。