将以下xml拷贝到 项目.csproj 文件中
1
2
3
4
5
6
7
<Target Name="ToString(4)">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="Targets" />
</GetAssemblyIdentity>
<WriteLinesToFile File="Build.properties" Overwrite="True" Lines="AssemblyVersion=$([System.Version]::Parse(%(Targets.Version)).ToString(3))">
</WriteLinesToFile>
</Target>
- AfterBuild 代表执行编译完成后执行的
- $(TargetPath) 就是编译后dll的完整路径 (属性)
- %(Targets.Version) 就是从dll中获取到的版本号 (元数据)
ToString(3) 只会获取到版本号的前3段, 例如: 1.2.8 ToString() 或 ToString(4) 就会获取到 完整的版本号
这个 Task 执行过后, 会在目录下自动生成一个 Build.properties文件, 内容就是assembly的版本号。
利用这个就可以做好多事情了。jenkins可以用EnvInject获取到这个文件获取到版本号, 开发环境下,可以用nuget pack -Version 打包时自动加上 alpha 版本,以区分开发版、预发版,正式版本。