MSBuild Task获取Assemly版本号

msbuild task get assembly version

Posted by alovn on May 7, 2019

将以下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 版本,以区分开发版、预发版,正式版本。

参考文档 msbuild