发布时如何在构建目标运行之前修改 CS 文件

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

我构建和部署了许多应用程序,我希望在代码中提供版本控制信息。此版本控制信息由 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 文件?

c# visual-studio msbuild csproj
1个回答
0
投票

如果您想确保在MSBuild中发布过程中编译发布过程之前生成的文件,可以检查以下步骤:

  1. 将生成的文件添加到编译项组中。
<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>
  1. 通过 BeforeTargets 在
    publish
    之前生成新版本文件。
<Target Name="CheckGenerateVersionFile" BeforeTargets="publish">
    <CallTarget Targets="GenerateVersionFile"  />
</Target>
    
© www.soinside.com 2019 - 2024. All rights reserved.