2

TL;DR

ビジュアル エラーなしでプロジェクトのビルドをスキップする Visual Studio ビルド前イベントを使用できますか?

詳細

pre-buildカスタム XML ファイルと、イベント中に XML からリソース ファイルを生成する Powershell スクリプトを含むプロジェクトがあります。

私の目標は、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???
}
4

1 に答える 1

0

これを機能させることができました。方法は次のとおりです。

用語:

  • 入力ファイル - ユーザーが編集したファイル
  • 出力ファイル - 入力ファイルから生成されたファイル
  • 出力ディレクトリ - 通常.\bin\debug\または.\bin\release

手順:

  1. ビルド時に、入力ファイルを出力ディレクトリにコピーします (Visual Studio のプロパティ ウィンドウでこれを変更します)。
  2. 入力ファイルが以前の入力ファイル (現在出力ディレクトリにある) と異なる場合にのみ生成するようにスクリプトを変更します。
  3. 次のように、スクリプトをBeforeBuildターゲットとして実行します。

生成されたファイルは出力ディレクトリにのみ存在するため、MSBuild には比較対象がありません。つまり、入力ファイルが以前にコピーされた入力ファイルと異なる場合にのみ、完全なビルドが実行されます (コピーはビルド後にのみ行われますが、比較はビルド前に行われることに注意してください)。

于 2015-11-16T17:29:38.847 に答える