我可以使用`pre-build`脚本来决定是否构建或跳过项目吗?

时间:2015-03-17 18:10:10

标签: xml visual-studio powershell build pre-build-event

TL; DR

我是否可以在没有可视错误的情况下跳过项目构建的Visual Studio预构建事件?

详细

我有一个项目,其中包含一个自定义XML文件和一个Powershell脚本,该脚本在pre-build事件期间从XML生成资源文件。

我的目标是仅在XML文件发生更改时才构建项目。我已经可以确定文件是否已更改,但我无法通知Visual Studio跳过构建。我可以使用退出代码0(允许构建继续)或任何其他数字(在错误列表中显示一个丑陋的错误)来停止脚本。

我可以让pre-build脚本决定是否构建或跳过项目吗?

实施例

# Check to see if the current file is different from the file copied during build.
if((Test-Path $buildXmlFile) -and (Compare-Object -ReferenceObject (Get-Content $projectXmlFile) -DifferenceObject (Get-Content $buildXmlFile))){
    Write-Host "Changes found! Rebuilding!"
} else {
    Write-Host "No changes found! Skipping Build"
    # Exit 0 will cause it to still build...
    # Exit -1, Exit 1, etc. will cause a big error to show...
    # HOW DO I SKIP???
}

1 个答案:

答案 0 :(得分:0)

我能够让这个工作,这是如何:

术语:

  • 输入文件 - 用户编辑的文件
  • 输出文件 - 从输入文件生成的文件
  • 输出目录 - 通常为.\bin\debug\.\bin\release

步骤:

  1. 在构建时,将输入文件复制到输出目录(在Visual Studio的属性窗口中更改此内容)。
  2. 如果输入文件与上一个输入文件不同(当前位于输出目录中),则将脚本更改为仅生成。
  3. 将脚本作为BeforeBuild目标运行,如下所示:

      

  4. 由于生成的文件只存在于输出目录中,因此MSBuild无需与之进行比较。这意味着如果输入文件与先前复制的输入文件不同,它将仅执行完整构建(请记住,复制仅在构建之后发生,但比较在构建之前发生)。

相关问题