是否可以在<PreBuildEvent>
文件中设置可选的*.csproj
?我有以下内容:
<PropertyGroup>
<PreBuildEvent>git rev-parse HEAD >../../git-hash.txt</PreBuildEvent>
</PropertyGroup>
这会将最新的git哈希值输出到一个文件中,该文件嵌入在其他地方的可执行文件中。
由于我是一名大学生,我经常在大学机器上编写代码(而不是我家里的linux机器),这些代码有SVN而不是git,导致构建过程失败。是否可以使上述<PreBuildEvent />
可选,以便如果没有安装git,构建过程不会失败?
答案 0 :(得分:2)
只是跳过构建事件会给你留下一个空的git-hash.txt,这似乎不是最好的主意。相反,您可以尝试运行git命令,如果失败则将伪哈希写入文件。我不知道这样做的命令行语法(PreBuildEvent
在cmd.exe下运行)所以这是一个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
将为空,在这种情况下,它会设置为“未知”