MSBuild中的可选预构建事件?

MSBuild中的可选预构建事件?,build,msbuild,xbuild,Build,Msbuild,Xbuild,在*.csproj文件中是否可以有可选的?我有以下资料: <PropertyGroup> <PreBuildEvent>git rev-parse HEAD &gt;../../git-hash.txt</PreBuildEvent> </PropertyGroup> git rev parse HEAD.././git-hash.txt 这会将最新的git哈希输出到一个文件,该文件嵌入到其他地方的可执行文件中 由于我是一名大学生

*.csproj
文件中是否可以有可选的
?我有以下资料:

<PropertyGroup>
  <PreBuildEvent>git rev-parse HEAD &gt;../../git-hash.txt</PreBuildEvent>
</PropertyGroup>

git rev parse HEAD.././git-hash.txt
这会将最新的git哈希输出到一个文件,该文件嵌入到其他地方的可执行文件中


由于我是一名大学生,我经常在大学机器(而不是我家的linux机器)上编写代码,这些机器使用SVN而不是git,导致构建过程失败。是否可以将上述
设置为可选,以便在未安装git的情况下,构建过程不会失败?

跳过构建事件会留下一个空的git-hash.txt,因此这似乎不是最好的方法。相反,您可以尝试运行git命令,如果它失败,则向文件写入一个虚拟哈希。我不知道执行该操作的命令行语法(在cmd.exe下运行
PreBuildEvent
),因此这里有一个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
    将为空,在这种情况下,它被设置为“未知”
  • 依赖当前目录几乎总是一个坏主意,因此在属性中显式指定要运行git的目录
  • 输出文件也是如此

谢谢你的回答。
$(回购)
变量是内置的吗?不,对不起,应该更清楚。这是一个属性,您必须自己定义,并让它指向git存储库。如果这恰好是包含项目文件的目录,您可以使用$(ProjectDir)例如。因为我的解决方案目录(
$(SolutionDir)
我想?)是git存储库的根目录,所以我将使用它。此方法看起来比我使用的方法要好得多:)是的,请参阅以获取常见属性