| File: BackEnd\Shared\BuildAbortedException.cs | Web Access |
| Project: src\msbuild\src\Build\Microsoft.Build.csproj (Microsoft.Build) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Runtime.Serialization; using Microsoft.Build.Framework.BuildException; #if FEATURE_SECURITY_PERMISSIONS using System.Security.Permissions; #endif using Microsoft.Build.Shared; #nullable disable namespace Microsoft.Build.Exceptions { /// <summary> /// An exception representing the case where the build was aborted by request, as opposed to being /// unceremoniously shut down due to another kind of error exception. /// </summary> /// <remarks> /// This is public because it may be returned in the Exceptions collection of a BuildResult. /// If you add fields to this class, add a custom serialization constructor and override GetObjectData(). /// </remarks> [Serializable] public class BuildAbortedException : BuildExceptionBase { /// <summary> /// Constructs a standard BuildAbortedException. /// </summary> public BuildAbortedException() : base(ResourceUtilities.GetResourceString("BuildAborted")) { ResourceUtilities.FormatResourceStringStripCodeAndKeyword(out string errorCode, out _, "BuildAborted"); ErrorCode = errorCode; } /// <summary> /// Constructs a BuildAbortedException with an additional message attached. /// </summary> public BuildAbortedException(string message) : base(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("BuildAbortedWithMessage", message)) { ResourceUtilities.FormatResourceStringStripCodeAndKeyword(out string errorCode, out _, "BuildAbortedWithMessage", message); ErrorCode = errorCode; } /// <summary> /// Constructs a BuildAbortedException with an additional message attached and an inner exception. /// </summary> public BuildAbortedException(string message, Exception innerException) : this(message, innerException, false) { } internal static BuildAbortedException CreateFromRemote(string message, Exception innerException) { return new BuildAbortedException(message, innerException, true /* calledFromDeserialization */); } private BuildAbortedException(string message, Exception innerException, bool calledFromDeserialization) : base( calledFromDeserialization ? message : ResourceUtilities.FormatResourceStringStripCodeAndKeyword("BuildAbortedWithMessage", message), innerException) { if (!calledFromDeserialization) { ResourceUtilities.FormatResourceStringStripCodeAndKeyword(out string errorCode, out _, "BuildAbortedWithMessage", message); ErrorCode = errorCode; } } protected override IDictionary<string, string> FlushCustomState() { return new Dictionary<string, string>() { { nameof(ErrorCode), ErrorCode } }; } protected override void InitializeCustomState(IDictionary<string, string> state) { ErrorCode = state[nameof(ErrorCode)]; } /// <summary> /// Protected constructor used for (de)serialization. /// If we ever add new members to this class, we'll need to update this. /// </summary> #if NET8_0_OR_GREATER [Obsolete(DiagnosticId = "SYSLIB0051")] #endif protected BuildAbortedException(SerializationInfo info, StreamingContext context) : base(info, context) { ErrorCode = info.GetString("ErrorCode"); } /// <summary> /// Gets the error code (if any) associated with the exception message. /// </summary> /// <value>Error code string, or null.</value> public string ErrorCode { get; private set; } /// <summary> /// ISerializable method which we must override since Exception implements this interface /// If we ever add new members to this class, we'll need to update this. /// </summary> #if FEATURE_SECURITY_PERMISSIONS [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)] #endif #if NET8_0_OR_GREATER [Obsolete(DiagnosticId = "SYSLIB0051")] #endif public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); info.AddValue("ErrorCode", ErrorCode); } } }