MSBuild 中的可选 PreBuildEvent?
Optional PreBuildEvent in MSBuild?
是否可以在 *.csproj
文件中包含可选的 <PreBuildEvent>
?我有以下内容:
<PropertyGroup>
<PreBuildEvent>git rev-parse HEAD >../../git-hash.txt</PreBuildEvent>
</PropertyGroup>
这会将最新的 git 哈希输出到一个文件,该文件嵌入在其他地方的可执行文件中。
因为我是一名大学生,所以我经常在有 SVN 而不是 git 的大学机器(而不是我家里的 linux 机器)上编写代码,导致构建过程失败。是否可以使上面的 <PreBuildEvent />
成为可选的,这样如果 git 没有安装,构建过程就不会失败?
只是跳过构建事件会给您留下一个空的 git-hash.txt,所以这似乎不是最好的主意。相反,您可以尝试 运行 git 命令,如果失败,则将虚拟哈希写入文件。我不知道执行此操作的命令行语法(cmd.exe 下的 PreBuildEvent
运行s)所以这是一个 msbuild 解决方案。由于 BeforeTargets="Build"
它也会在构建之前 运行。
<Target Name="WriteGitHash" BeforeTargets="Build">
<Exec Command="git --work-tree=$(Repo) --git-dir=$(Repo)\.git rev-parse HEAD 2> NUL" ConsoleToMSBuild="true" IgnoreExitCode="True">
<Output TaskParameter="ConsoleOutput" PropertyName="GitTag" />
</Exec>
<PropertyGroup>
<GitTag Condition="'$(GitTag)' == ''">unknown</GitTag>
</PropertyGroup>
<WriteLinesToFile File="$(Repo)\git-hash.txt" Lines="$(GitTag)" Overwrite="True"/>
</Target>
一些注意事项:
2> NUL
将标准错误重定向到输出,因此 GitTag
将在出现错误时为空,在这种情况下它被设置为 'unknown'
- 依赖当前目录几乎总是一个坏主意,因此在 属性
中明确指定 运行 git 的目录
- 输出文件相同
是否可以在 *.csproj
文件中包含可选的 <PreBuildEvent>
?我有以下内容:
<PropertyGroup>
<PreBuildEvent>git rev-parse HEAD >../../git-hash.txt</PreBuildEvent>
</PropertyGroup>
这会将最新的 git 哈希输出到一个文件,该文件嵌入在其他地方的可执行文件中。
因为我是一名大学生,所以我经常在有 SVN 而不是 git 的大学机器(而不是我家里的 linux 机器)上编写代码,导致构建过程失败。是否可以使上面的 <PreBuildEvent />
成为可选的,这样如果 git 没有安装,构建过程就不会失败?
只是跳过构建事件会给您留下一个空的 git-hash.txt,所以这似乎不是最好的主意。相反,您可以尝试 运行 git 命令,如果失败,则将虚拟哈希写入文件。我不知道执行此操作的命令行语法(cmd.exe 下的 PreBuildEvent
运行s)所以这是一个 msbuild 解决方案。由于 BeforeTargets="Build"
它也会在构建之前 运行。
<Target Name="WriteGitHash" BeforeTargets="Build">
<Exec Command="git --work-tree=$(Repo) --git-dir=$(Repo)\.git rev-parse HEAD 2> NUL" ConsoleToMSBuild="true" IgnoreExitCode="True">
<Output TaskParameter="ConsoleOutput" PropertyName="GitTag" />
</Exec>
<PropertyGroup>
<GitTag Condition="'$(GitTag)' == ''">unknown</GitTag>
</PropertyGroup>
<WriteLinesToFile File="$(Repo)\git-hash.txt" Lines="$(GitTag)" Overwrite="True"/>
</Target>
一些注意事项:
2> NUL
将标准错误重定向到输出,因此GitTag
将在出现错误时为空,在这种情况下它被设置为 'unknown'- 依赖当前目录几乎总是一个坏主意,因此在 属性 中明确指定 运行 git 的目录
- 输出文件相同