HOW TO:忽略工作中的錯誤
有時您希望建置 (Build) 作業能夠容忍某些工作的錯誤。 如果那些非關鍵性工作執行失敗,您會希望建置作業還能繼續,因為它仍然能夠產生需要的輸出。 例如,如果專案使用 SendMail 工作,在每個元件建置完成後送出電子郵件訊息。當郵件伺服器無法使用,以致送不出狀態訊息時,您可能認為這並不會影響建置作業繼續完成。 或者,如果建置過程中通常會刪除中繼檔案,當這些檔案無法刪除時,您可能也會認為這不影響建置作業繼續完成。
使用 ContinueOnError 屬性
Task 項目的 ContinueOnError 屬性 (Attribute) 控制了工作執行失敗時,建置作業要停止或繼續。 這個屬性控制錯誤是否視為錯誤或警告,在組建繼續時。
ContinueOnError 屬性可能包含下列其中一個值:
WarnAndContinue 或 true。 當工作失敗時,在 目標 項目和組建的後續工作繼續執行,因此,從工作的所有警告視為錯誤。
ErrorAndContinue。 當工作失敗時,在 Target 項目和組建的後續工作繼續執行,因此,從工作的任何錯誤都會被視為錯誤。
ErrorAndStop 或 錯誤 (預設值)。 當工作失敗時,在 Target 項目和組建的剩餘工作沒有執行,因此,整個項目 Target 和組建視為失敗。
.NET Framework 的版本。4.5 之前只支援 true 和 false 值。
ContinueOnError 的預設值為 ErrorAndStop。 如果您將設定為 ErrorAndStop的屬性,可讓您明確行為對讀取專案檔的人。
若要忽略工作中的錯誤
請使用工作的 ContinueOnError 屬性。 例如:
<Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>
範例
在下列程式碼中,示範了即使 Delete 工作執行失敗,Build 目標 (Target) 仍然繼續執行,建置作業仍然視為成功。
<Project DefaultTargets="FakeBuild"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Files Include="*.obj"/>
</ItemGroup>
<Target Name="Clean">
<Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>
</Target>
<Target Name="FakeBuild" DependsOnTargets="Clean">
<Message Text="Building after cleaning..."/>
</Target>
</Project>