diff --git a/src/Microsoft.DotNet.SignTool.Tests/FakeSignTool.cs b/src/Microsoft.DotNet.SignTool.Tests/FakeSignTool.cs index 74fc9d120ad..bbe40913f7e 100644 --- a/src/Microsoft.DotNet.SignTool.Tests/FakeSignTool.cs +++ b/src/Microsoft.DotNet.SignTool.Tests/FakeSignTool.cs @@ -34,7 +34,7 @@ public override SigningStatus VerifySignedPEFile(Stream stream) public override SigningStatus VerifyStrongNameSign(string fileFullPath) => SigningStatus.Signed; - public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath) + public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath, bool suppressErrors = false) => buildEngine.BuildProjectFile(projectFilePath, null, null, null); internal static void SignFile(string path) diff --git a/src/Microsoft.DotNet.SignTool/src/RealSignTool.cs b/src/Microsoft.DotNet.SignTool/src/RealSignTool.cs index 04c9a7c97c4..27ca130fce3 100644 --- a/src/Microsoft.DotNet.SignTool/src/RealSignTool.cs +++ b/src/Microsoft.DotNet.SignTool/src/RealSignTool.cs @@ -46,7 +46,7 @@ internal RealSignTool(SignToolArgs args, TaskLoggingHelper log) : base(args, log _dotnetTimeout = args.DotNetTimeout; } - public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath) + public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath, bool suppressErrors = false) { if (_dotnetPath == null) { @@ -80,7 +80,10 @@ public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath bool success = true; if (!process.WaitForExit(_dotnetTimeout)) { - _log.LogError($"MSBuild process did not exit within '{_dotnetTimeout}' ms."); + if (suppressErrors) + _log.LogMessage(MessageImportance.High, $"MSBuild process did not exit within '{_dotnetTimeout}' ms."); + else + _log.LogError($"MSBuild process did not exit within '{_dotnetTimeout}' ms."); process.Kill(); process.WaitForExit(); success = false; @@ -88,8 +91,12 @@ public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath if (process.ExitCode != 0) { - _log.LogError($"Failed to execute MSBuild on the project file '{projectFilePath}'" + - $" with exit code '{process.ExitCode}'."); + if (suppressErrors) + _log.LogMessage(MessageImportance.High, $"Failed to execute MSBuild on the project file '{projectFilePath}'" + + $" with exit code '{process.ExitCode}'."); + else + _log.LogError($"Failed to execute MSBuild on the project file '{projectFilePath}'" + + $" with exit code '{process.ExitCode}'."); success = false; } diff --git a/src/Microsoft.DotNet.SignTool/src/SignTool.cs b/src/Microsoft.DotNet.SignTool/src/SignTool.cs index e1eecfe9efa..b7fcc6c248c 100644 --- a/src/Microsoft.DotNet.SignTool/src/SignTool.cs +++ b/src/Microsoft.DotNet.SignTool/src/SignTool.cs @@ -49,7 +49,7 @@ internal SignTool(SignToolArgs args, TaskLoggingHelper log) public abstract SigningStatus VerifyStrongNameSign(string fileFullPath); - public abstract bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath); + public abstract bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath, bool suppressErrors = false); public bool Sign(IBuildEngine buildEngine, int round, IEnumerable files) { @@ -191,7 +191,7 @@ private bool AuthenticodeSignAndNotarize(IBuildEngine buildEngine, int round, IE { var notarizeProjectPath = Path.Combine(dir, $"Round{round}-Notarize.proj"); File.WriteAllText(notarizeProjectPath, GenerateBuildFileContent(filesToNotarize, null, true)); - + // Notarization can be flaky, so retry up to 5 times with no wait between retries const int maxRetries = 5; int attempt = 0; @@ -208,7 +208,8 @@ private bool AuthenticodeSignAndNotarize(IBuildEngine buildEngine, int round, IE notarizationSucceeded = RunMSBuild(buildEngine, notarizeProjectPath, Path.Combine(_args.LogDir, $"{notarizeLogName}.binlog"), Path.Combine(_args.LogDir, $"{notarizeLogName}.log"), - Path.Combine(_args.LogDir, $"{notarizeLogName}.error.log")); + Path.Combine(_args.LogDir, $"{notarizeLogName}.error.log"), + suppressErrors: attempt < maxRetries); if (!notarizationSucceeded && attempt < maxRetries) { diff --git a/src/Microsoft.DotNet.SignTool/src/ValidationOnlySignTool.cs b/src/Microsoft.DotNet.SignTool/src/ValidationOnlySignTool.cs index 98bdd73b160..aae9ac59d9b 100644 --- a/src/Microsoft.DotNet.SignTool/src/ValidationOnlySignTool.cs +++ b/src/Microsoft.DotNet.SignTool/src/ValidationOnlySignTool.cs @@ -55,7 +55,7 @@ public override SigningStatus VerifySignedPEFile(Stream assemblyStream) public override SigningStatus VerifyStrongNameSign(string fileFullPath) => SigningStatus.Signed; - public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath) + public override bool RunMSBuild(IBuildEngine buildEngine, string projectFilePath, string binLogPath, string logPath, string errorLogPath, bool suppressErrors = false) { if (TestSign) {