MSBuild中的可选预构建事件?
在MSBuild中的可选预构建事件?,build,msbuild,xbuild,Build,Msbuild,Xbuild,在*.csproj文件中是否可以有可选的?我有以下资料: <PropertyGroup> <PreBuildEvent>git rev-parse HEAD >../../git-hash.txt</PreBuildEvent> </PropertyGroup> git rev parse HEAD.././git-hash.txt 这会将最新的git哈希输出到一个文件,该文件嵌入到其他地方的可执行文件中 由于我是一名大学生
*.csproj
文件中是否可以有可选的
?我有以下资料:
<PropertyGroup>
<PreBuildEvent>git rev-parse HEAD >../../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存储库的根目录,所以我将使用它。此方法看起来比我使用的方法要好得多:)是的,请参阅以获取常见属性