VS Code、.NET Core - 使用 MSBuild Target 构建之前更新版本

问题描述 投票:0回答:1

我正在尝试在编译项目之前自动更新 .csproj 文件中的版本元素,以便输出的 dll 具有该版本号。

我的要求:

    仅在发布版本上运行
  1. 仅在项目
  2. 实际正在构建时才运行(不通过增量构建处理跳过)
目前,我一直坚持文件的版本输出落后一个版本,就好像编译/构建过程在我的 MSBuild 目标运行之前读取了我的 .csproj 并忽略了我的更新。

我有以下内容:

<PropertyGroup> <VersionPrefix>1.0.20</VersionPrefix> <VersionSuffix>03412bb</VersionSuffix> </PropertyGroup> <Target Name="ReleaseVersion" Condition="'$(Configuration)' == 'Release'" BeforeTargets="BeforeBuild"> <Exec Command="{snip of command that updates/saves VersionPrefix/Suffix of this file}" /> </Target>
是否有更好的目标可用于 

BeforeTargets

 值?有没有办法可以执行命令来返回信息,然后设置一个变量供 msbuild 在设置生成的 dll 的 
Product version
 属性时使用?

c# .net-core msbuild
1个回答
0
投票
@gunr2171 为我指明了正确的方向,指出了关于

Setting the version number for .NET Core Projects. 的评论。

我真正想做的就是通过

VersionSuffix

 将当前的 git 提交哈希附加到文件版本的末尾。

在 dotnet cli 中使用

/p:InformationalVersion="1.2.3-qa"

 有两个直接问题(可以克服)

    该版本将是动态的(通过查找最后一次提交哈希),因此我必须运行某种任务来获取它,然后将其注入到此命令行中。
  1. 在构建使用“程序集 A”和“程序集 B”的“站点 A”时,我需要确保
  2. 如果要构建程序集 A 或 B,我也必须更新它们的版本,所以我没有”我不明白纯粹的“dotnet cli”解决方案如何工作,导致我不得不使用 MSBuild 任务 - 正如问题所示,我已经失败了。
但是,链接问题中的下一个答案讨论了 Directory.Build.props 文件/功能。这非常适合我的用例。

在我的“发布”任务中,我

第一个调用我的“可执行文件”,它将检测当前项目的当前提交及其所有依赖项(如果在暂存文件或工作目录中执行文件,则显然会落后一个)。然后,我使用最新的提交哈希生成/更新每个 Directory.Build.props(位于与 *.csproj 相同的文件夹中)。

生成的

Directory.Build.props

 文件显示如下。

<Project> <PropertyGroup> <VersionSuffix>919022d</VersionSuffix> </PropertyGroup> </Project>
由于我每次发布时都会生成/更新此文件,并且它有点像不需要在存储库中跟踪的“代码生成”文件,因此我将此文件添加到 

.gitignore

 文件中,以便当我这样做时发布,如果生成/更新了任何 Directory.Build.props 文件,则不需要新的提交。

© www.soinside.com 2019 - 2024. All rights reserved.