我可以让“预构建”脚本决定是构建还是跳过项目吗?
Can I have a `pre-build` script decide whether to build or skip the project?
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???
}
我能够让它工作,方法如下:
术语:
- 输入文件 - 用户编辑的文件
- 输出文件 - 从输入文件生成的文件
- 输出目录 - 通常
.\bin\debug\
或 .\bin\release
步骤:
- 构建时,将输入文件复制到输出目录(在 Visual Studio 的属性 window 中更改此设置)。
- 将脚本更改为仅在输入文件与之前的输入文件(当前位于输出目录中)不同时生成。
运行 脚本作为 BeforeBuild
目标,像这样:
由于生成的文件仅存在于输出目录中,因此 MSBuild 无法与之进行比较。这意味着如果输入文件与之前复制的输入文件不同,它只会执行完整构建(请记住,复制仅在构建之后发生,但比较发生在构建之前)。
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???
}
我能够让它工作,方法如下:
术语:
- 输入文件 - 用户编辑的文件
- 输出文件 - 从输入文件生成的文件
- 输出目录 - 通常
.\bin\debug\
或.\bin\release
步骤:
- 构建时,将输入文件复制到输出目录(在 Visual Studio 的属性 window 中更改此设置)。
- 将脚本更改为仅在输入文件与之前的输入文件(当前位于输出目录中)不同时生成。
运行 脚本作为
BeforeBuild
目标,像这样:
由于生成的文件仅存在于输出目录中,因此 MSBuild 无法与之进行比较。这意味着如果输入文件与之前复制的输入文件不同,它只会执行完整构建(请记住,复制仅在构建之后发生,但比较发生在构建之前)。