原始问题
我有一个
目录。构建目标
当使用Release配置构建时,该文件将增加项目版本的构建编号。即,产品版本为
1.0.0.0
,当内置于Release配置中时,此目标将使其
1.0.0.1
,等等。由于某种原因,我收到了这个错误:
MSB4067 The element <WriteLinesToFile> beneath element <Target> is unrecognized.
代码
<Project Sdk="Microsoft.NET.Sdk">
<Target Name="IncrementBuildNumber" BeforeTargets="GenerateAssemblyInfo" Condition="'$(Configuration)' == 'Release'">
<PropertyGroup>
<VersionFile>$(MSBuildThisFileDirectory)version.txt</VersionFile>
</PropertyGroup>
<ReadLinesFromFile File="$(VersionFile)">
<Output TaskParameter="Lines" ItemName="VersionLines"/>
</ReadLinesFromFile>
<PropertyGroup>
<VersionString>%(VersionLines[0])</VersionString>
<MajorVersion>$([System.String]::Split($(VersionString), '.')[0])</MajorVersion>
<MinorVersion>$([System.String]::Split($(VersionString), '.')[1])</MinorVersion>
<PatchNumber>$([System.String]::Split($(VersionString), '.')[2])</PatchNumber>
<BuildNumber>$([System.String]::Split($(VersionString), '.')[3])</BuildNumber>
</PropertyGroup>
<PropertyGroup>
<NewBuildNumber>$([System.Int32]::Parse($(BuildNumber)) + 1)</NewBuildNumber>
<NewVersion>$(MajorVersion).$(MinorVersion).$(PatchNumber).$(NewBuildNumber)</NewVersion>
</PropertyGroup>
<WriteLinesToFile File="$(VersionFile)" Overwrite="true">
$(NewVersion)
</WriteLinesToFile>
<PropertyGroup>
<Version>$(NewVersion)</Version>
</PropertyGroup>
</Target>
</Project>
更新问题
由于第一个答案,原始错误得以解决。然而,现在我面临着一个奇怪的问题,我无法评估
old version + 1
表达。两者都没有
System.Convert
,也不是
System.Int32.Parse
在此MSBuild场景中不起作用。
问题是:这是实施它的正确和最无痛的方法吗?如果没有,考虑到我希望它在Windows上的本地构建和CI中也能工作,最简单的方法是什么?