diff --git a/src/Tasks/SignFile.cs b/src/Tasks/SignFile.cs index e2870e80240..f38c03c9572 100644 --- a/src/Tasks/SignFile.cs +++ b/src/Tasks/SignFile.cs @@ -22,8 +22,11 @@ namespace Microsoft.Build.Tasks /// It can sign ClickOnce manifests as well as exe's. /// [SupportedOSPlatform("windows")] - public sealed class SignFile : Task + [MSBuildMultiThreadableTask] + public sealed class SignFile : Task, IMultiThreadableTask { + public TaskEnvironment TaskEnvironment { get; set; } = TaskEnvironment.Fallback; + public SignFile() : base(AssemblyResources.PrimaryResources, "MSBuild.") { @@ -49,12 +52,14 @@ public override bool Execute() Log.LogErrorWithCodeFromResources("General.TaskRequiresWindows", nameof(SignFile)); return false; } + AbsolutePath signingTargetPath = TaskEnvironment.GetAbsolutePath(SigningTarget.ItemSpec); + string SanitizeMessage(string msg) => msg?.Replace((string)signingTargetPath, signingTargetPath.OriginalValue) ?? msg; try { SecurityUtilities.SignFile( CertificateThumbprint, TimestampUrl == null ? null : new Uri(TimestampUrl), - SigningTarget.ItemSpec, + signingTargetPath, TargetFrameworkVersion, TargetFrameworkIdentifier, DisallowMansignTimestampFallback); @@ -65,29 +70,29 @@ public override bool Execute() Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore"); return false; } - catch (FileNotFoundException ex) + catch (FileNotFoundException) { - Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", ex.FileName); + Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", signingTargetPath.OriginalValue); return false; } catch (ApplicationException ex) { - Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); + Log.LogErrorWithCodeFromResources("SignFile.SignToolError", SanitizeMessage(ex.Message).Trim()); return false; } catch (WarningException ex) { - Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", ex.Message.Trim()); + Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", SanitizeMessage(ex.Message).Trim()); return true; } catch (CryptographicException ex) { - Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); + Log.LogErrorWithCodeFromResources("SignFile.SignToolError", SanitizeMessage(ex.Message).Trim()); return false; } catch (Win32Exception ex) { - Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); + Log.LogErrorWithCodeFromResources("SignFile.SignToolError", SanitizeMessage(ex.Message).Trim()); return false; } catch (UriFormatException ex)