我构建和部署了许多应用程序,我希望在代码中提供版本控制信息。此版本控制信息由 GitHash 和部署日期、部署分支以及 git 存储库在发布时是否“脏”等内容组成。此信息对于调试部署问题非常有用,并帮助我了解部署的版本以及部署的时间。
这是自动生成的 version.cs 文件的示例:
using System;
namespace Common
{
public static class Version
{
public static readonly DateTime Date = DateTime.Parse("2024-09-30T16:29:16.368Z").ToUniversalTime();
public static readonly string Guid = "c7b312cf-3cde-4141-97cd-97648216373a";
public static readonly string GitHash = "78d90bd133450f2c412d772de3b493650afae754";
public static readonly string Branch = "master";
public static readonly bool GitIsDirty = false;
}
}
通常我会自动创建一个包含所有这些信息的 version.json 文件(发布时),但这意味着在运行时我必须读取此文件才能使用,我宁愿做的是自动创建一个 version.cs文件(发布时)并将该文件编译到应用程序中。
所以我现在所处的位置是,我已经编辑了我的 csproj 文件以具有特殊的构建目标。当构建发生并且发布发生时,该构建目标就会被执行。问题是编译器未拾取生成的新 CS 文件(请参阅上面的文件)。相反......发布之前存在的文件被编译到应用程序中。
<Target Name="GenerateVersionFile">
<!-- run script to generate version json file -->
<Exec Command="npm run generateVersionFile" />
</Target>
<Target Name="CheckGenerateVersionFile" BeforeTargets="Build">
<!-- ONLY IF PUBLISHING: Generate new version file -->
<CallTarget Targets="GenerateVersionFile" Condition="'$(PublishProtocol)' != ''" />
</Target>
注意:我只想在构建和发布时生成新版本文件。我不想每次构建时都创建新版本文件。
所以我的问题是:有没有办法让我在执行发布时修改 CS 文件?
如果您想确保在MSBuild中发布过程中编译发布过程之前生成的文件,可以检查以下步骤:
<Target Name="GenerateVersionFile">
<!-- run script to generate version json file -->
<Exec Command=""npm run generateVersionFile" />
<ItemGroup>
<Compile Include="your real path\version.cs" />
</ItemGroup>
</Target>
publish
之前生成新版本文件。<Target Name="CheckGenerateVersionFile" BeforeTargets="publish">
<CallTarget Targets="GenerateVersionFile" />
</Target>