Ignorowanie błędów w zadaniach
Czasami kompilacja ma być odporna na błędy w niektórych zadaniach. Jeśli te zadania niekrytyczne kończą się niepowodzeniem, chcesz kontynuować kompilację, ponieważ nadal może wygenerować wymagane dane wyjściowe. Jeśli na przykład projekt używa SendMail
zadania do wysyłania wiadomości e-mail po skompilowanym składniku, możesz rozważyć jego zaakceptowanie, aby kontynuować uzupełnianie nawet wtedy, gdy serwery poczty są niedostępne i nie można wysłać wiadomości o stanie. Jeśli na przykład pliki pośrednie są zwykle usuwane podczas kompilacji, możesz rozważyć, że kompilacja będzie mogła kontynuować uzupełnianie nawet wtedy, gdy nie można usunąć tych plików.
Oprócz metod opisanych tutaj, które są specyficzne dla zadań, można również użyć ogólnych sposobów ignorowania ostrzeżeń programu MSBuild, na przykład przy użyciu właściwości MSBuildWarningsAsMessages
. Zobacz Typowe właściwości projektu MSBuild.
Używanie atrybutu ContinueOnError
Atrybut ContinueOnError
Task
elementu określa, czy kompilacja zatrzymuje się lub kontynuuje, gdy wystąpi awaria zadania. Ten atrybut określa również, czy błędy są traktowane jako błędy lub ostrzeżenia, gdy kompilacja będzie kontynuowana.
Atrybut ContinueOnError
może zawierać jedną z następujących wartości:
WarnAndContinue lub true. Gdy zadanie zakończy się niepowodzeniem, kolejne zadania w elemecie Target i kompilacja będą nadal wykonywane, a wszystkie błędy z zadania są traktowane jako ostrzeżenia.
ErrorAndContinue. Gdy zadanie zakończy się niepowodzeniem, kolejne zadania w elemecie
Target
i kompilacji będą nadal wykonywane, a wszystkie błędy z zadania są traktowane jako błędy.ErrorAndStop lub false (wartość domyślna). Gdy zadanie zakończy się niepowodzeniem, pozostałe zadania w elemecie
Target
i kompilacji nie są wykonywane, a całyTarget
element i kompilacja są uznawane za nieudane.
Wersje programu .NET Framework przed wersją 4.5 obsługiwały tylko true
wartości i false
.
Wartość domyślna ContinueOnError
to ErrorAndStop
. Jeśli ustawisz atrybut na ErrorAndStop
, zachowanie będzie jawne dla każdego, kto odczytuje plik projektu.
Aby zignorować błąd w zadaniu
ContinueOnError
Użyj atrybutu zadania. Na przykład:
<Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>
Przykład
Poniższy przykład kodu ilustruje, że Build
element docelowy nadal działa, a kompilacja jest uznawana za sukces, nawet jeśli Delete
zadanie zakończy się niepowodzeniem.
<Project DefaultTargets="FakeBuild"
xmlns="http://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>