Visual Studio:如何使用MSBuild和Git进行增量构建

3
我创建了一个目标,并在教程中指定了输入和输出,用于从SASS文件构建CSS文件。通常情况下可以工作,但是当我切换到具有较旧文件时间戳的旧Git分支时,MSBuild会跳过我的目标以重建我的文件,因为我的输入时间戳比输出时间戳旧,因此MSBuild认为我的输出已经是最新的。
我该如何让Visual Studio递增地构建我的SASS文件,并在我切换Git分支时清除/忽略我的输出?我想避免手动清理已编译的CSS文件以强制进行构建。

你可以在构建后事件中将当前的git哈希值和/或提交日期存储到一个文件中,然后在预构建事件中比较该文件(如果有的话)与“新”的当前git哈希值/日期。如果新的哈希值/日期早于旧的,则进行清理构建。 - stijn
1个回答

3
你可以使用“Post Checkout Hook”(参见官方Git文档)。将您的clean命令放在文件.git/hooks/post-checkout中,例如:
msbuild myproj.csproj /t:clean

当你切换分支时,应该运行该命令。

这将导致进行完整的重建,这可能是你想要的,因为很难确定哪些文件在分支之间发生了变化。

据我所知,所有Git钩子都是本地存储在仓库中的,不能被检入。如果要与其他用户共享您的钩子,可以将其保存在存储库的某个位置,然后告诉用户手动复制到正确的位置,或者添加一个构建事件以在需要时将其复制到正确位置。


1
当然,这会导致完整的构建。我认为这是正确的做法,因为无法确定切换到任意分支会影响哪些输出。甚至可能没有myproj.csproj文件。 - Tom Blodget
很棒的想法。我似乎无法在Git中提交post-checkout钩子文件。这是否意味着我的团队中每个开发人员都必须手动添加此post-checkout钩子文件? - burnt1ce
没错。我已经更新了我的帖子,并提供了一些实现这个想法的方法。 - Scott Weldon
我们可以在项目文件夹中创建并保存它们,并创建一个符号链接到Git钩子。 - SRP-Achiever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接