为了解决这个问题,百度,google了大半天找到:
Auto Versioning in Visual Studio 2017 (.NET Core)
参考了里面的一些解决方案,自己做了个实现:
1.编写AutoVersioningTask.targets文件保存到项目目录中,内容如下
<Project>
<UsingTask TaskName="WriteAllTextToFile" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<ParameterGroup>
<FileName ParameterType="System.String" Required="true" />
<Text ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Code Type="Fragment" Language="cs">
<![CDATA[
File.WriteAllText(FileName,Text);
]]>
</Code>
</Task>
</UsingTask>
<Choose>
<When Condition="Exists('$(MSBuildProjectDirectory)\ver.txt') And Exists('$(MSBuildProjectDirectory)\bn.txt')">
<PropertyGroup>
<_VersionDefine>$([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)\ver.txt"))</_VersionDefine>
<_OldBuildNumber>$([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)\bn.txt"))</_OldBuildNumber>
<_NewBuildNumber>$([MSBuild]::Add($(_OldBuildNumber),1))</_NewBuildNumber>
<FileVersion>$(_VersionDefine).$(_OldBuildNumber)</FileVersion>
<Version>$(_VersionDefine)</Version>
</PropertyGroup>
</When>
<When Condition="!Exists('$(MSBuildProjectDirectory)\ver.txt') Or !Exists('$(MSBuildProjectDirectory)\bn.txt')">
<PropertyGroup>
<_VersionDefine>1.0.0</_VersionDefine>
<_OldBuildNumber>0</_OldBuildNumber>
<_NewBuildNumber>$([MSBuild]::Add($(_OldBuildNumber),1))</_NewBuildNumber>
<FileVersion>$(_VersionDefine).$(_OldBuildNumber)</FileVersion>
<Version>$(_VersionDefine)</Version>
</PropertyGroup>
</When>
</Choose>
<Target Name="_SaveBuildNumber" AfterTargets="Publish">
<WriteAllTextToFile FileName="$(MSBuildProjectDirectory)\ver.txt" Text="$(_VersionDefine)"/>
<WriteAllTextToFile FileName="$(MSBuildProjectDirectory)\bn.txt" Text="$(_NewBuildNumber)"/>
</Target>
</Project>
此文件的功能为:
1).从项目文件夹中加载bn.txt,里面保存了编译次数,bn.txt内容如下:
0
2).从项目文件加载ver.txt,里面保存了程序集版本号,ver.txt内容如下:
1.0.0
3).如果文件这两个文件有一个不存在,则在发布程序集后自动创建并初始化
4).文件版本号会拼接:程序集版本号和编译次数,作为文件版本号,程序集版本号则直接使用
5).在发布完成后,编译次数会自动+1并保存回bn.txt
2.在项目文件中导入AutoVersioningTask.targets,项目文件中加入下面内容:
<Import Project="AutoVersioningTask.targets" />
3.至此程序集每发布一次,文件版本号自动+1
4.设置版本号只需要改ver.txt的内容即可,文件版本号,程序集版本号会自动根据ver.txt的内容设置
5.编译次数也可以通过修改bn.txt修改,一般让其自动维护即可
最后可用于生产的成品 Nuget包 :
Tnelab.AutoVersioningTask