【问题标题】:Can I have a `pre-build` script decide whether to build or skip the project?我可以有一个“预构建”脚本来决定是构建还是跳过项目?
【发布时间】:2015-03-17 18:10:10
【问题描述】:

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???
}

【问题讨论】:

  • 所以你只想在xml文件更改时构建?不是在其他源文件更改时?
  • 是的,但真正的问题是我能否使构建从预构建事件中跳过(而不是失败)。
  • 我认为您不能在预构建脚本中执行此操作。我认为这一切只是通过不重建未更改的项目来加速构建。我知道的唯一方法是通过目标输入和输出。见How to: Build Incrementally。您可以在 proj 文件中使用 BeforeTargets="Build" 将生成步骤添加为目标,输入为 xml 文件,输出为任何生成的文件。

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


【解决方案1】:

我能够让它工作,方法如下:

术语:

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

步骤:

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

由于生成的文件只存在于输出目录中,MSBuild 没有什么可以与之比较的。这意味着它只会在输入文件与之前复制的输入文件不同的情况下进行完整的构建(请记住,复制只发生在构建之后,但比较发生在构建之前)。

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 2011-01-28
    • 2011-06-20
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多