diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/SolutionBuildContextProvider.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/SolutionBuildContextProvider.cs
new file mode 100644
index 00000000000..70f253254ec
--- /dev/null
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/SolutionBuildContextProvider.cs
@@ -0,0 +1,184 @@
+// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
+
+using System.Diagnostics;
+using Microsoft.VisualStudio.IO;
+using Microsoft.VisualStudio.ProjectSystem.UpToDate;
+using Microsoft.VisualStudio.Shell.Interop;
+using Microsoft.VisualStudio.Telemetry;
+
+namespace Microsoft.VisualStudio.ProjectSystem.VS.UpToDate;
+
+///
+/// Monitors solution build events, and up-to-date check results. Maintains the current
+/// as well as statistics about each solution build operation for reporting to the user and via telemetry.
+///
+[Export(typeof(ISolutionBuildContextProvider))]
+[Export(typeof(ISolutionBuildEventListener))]
+internal sealed class SolutionBuildContextProvider : ISolutionBuildContextProvider, ISolutionBuildEventListener
+{
+ private readonly Stopwatch _stopwatch = new();
+
+ private readonly IProjectThreadingService _threadingService;
+ private readonly IVsUIService _outputWindow;
+ private readonly IFileSystem _fileSystem;
+
+ private int _projectCount;
+ private int _configuredProjectCount;
+ private int _upToDateProjectCount;
+ private int _outOfDateProjectCount;
+ private int _acceleratedProjectCount;
+ private int _accelerationCandidateProjectCount;
+ private int _accelerationFileCopyCount;
+ private int _accelerationEnabledCount;
+ private int _accelerationDisabledCount;
+ private int _accelerationUnspecifiedCount;
+ private int _filesCheckedCount;
+ private long _waitTime;
+ private long _checkTime;
+ private LogLevel _logLevel;
+ private bool _hasRebuild;
+
+ [ImportingConstructor]
+ public SolutionBuildContextProvider(
+ IProjectThreadingService threadingService,
+ IFileSystem fileSystem,
+ IVsUIService outputWindow)
+ {
+ _threadingService = threadingService;
+ _fileSystem = fileSystem;
+ _outputWindow = outputWindow;
+ }
+
+ public SolutionBuildContext? CurrentSolutionBuildContext { get; private set; }
+
+ public void NotifySolutionBuildStarting()
+ {
+ _stopwatch.Restart();
+
+ _projectCount = 0;
+ _configuredProjectCount = 0;
+ _upToDateProjectCount = 0;
+ _outOfDateProjectCount = 0;
+ _acceleratedProjectCount = 0;
+ _accelerationCandidateProjectCount = 0;
+ _accelerationFileCopyCount = 0;
+ _accelerationEnabledCount = 0;
+ _accelerationDisabledCount = 0;
+ _accelerationUnspecifiedCount = 0;
+ _filesCheckedCount = 0;
+ _waitTime = 0;
+ _checkTime = 0;
+ _logLevel = 0;
+ _hasRebuild = false;
+
+ CurrentSolutionBuildContext = new(_fileSystem);
+ }
+
+ public void NotifyProjectChecked(
+ bool upToDate,
+ bool? buildAccelerationEnabled,
+ BuildAccelerationResult result,
+ int configurationCount,
+ int copyCount,
+ int fileCount,
+ TimeSpan waitTime,
+ TimeSpan checkTime,
+ LogLevel logLevel)
+ {
+ // Aggregate data in a thread safe way, as up-to-date checks can overlap
+
+ Interlocked.Add(ref _configuredProjectCount, configurationCount);
+ Interlocked.Add(ref _accelerationFileCopyCount, copyCount);
+ Interlocked.Add(ref _filesCheckedCount, fileCount);
+ Interlocked.Add(ref _waitTime, waitTime.Ticks);
+ Interlocked.Add(ref _checkTime, checkTime.Ticks);
+
+ // All projects will have the same log level, so we don't need any kind of comparison here
+ _logLevel = logLevel;
+
+ if (result != BuildAccelerationResult.EnabledAccelerated)
+ {
+ Interlocked.Increment(ref upToDate ? ref _upToDateProjectCount : ref _outOfDateProjectCount);
+ }
+
+ if (buildAccelerationEnabled is null)
+ {
+ Interlocked.Increment(ref _accelerationUnspecifiedCount);
+ }
+ else if (buildAccelerationEnabled is true)
+ {
+ Interlocked.Increment(ref _accelerationEnabledCount);
+ }
+ else
+ {
+ Interlocked.Increment(ref _accelerationDisabledCount);
+ }
+
+ if (result == BuildAccelerationResult.DisabledCandidate)
+ {
+ Interlocked.Increment(ref _accelerationCandidateProjectCount);
+ }
+ else if (result == BuildAccelerationResult.EnabledAccelerated)
+ {
+ Interlocked.Increment(ref _acceleratedProjectCount);
+ }
+ }
+
+ public void NotifyProjectBuildStarting(bool isRebuild)
+ {
+ if (isRebuild)
+ {
+ _hasRebuild = true;
+ }
+
+ Interlocked.Increment(ref _projectCount);
+ }
+
+ public void NotifySolutionBuildCompleted(bool cancelled)
+ {
+ CurrentSolutionBuildContext = null;
+
+ _stopwatch.Stop();
+
+ if (cancelled || _hasRebuild)
+ {
+ // Don't report telemetry for rebuilds, or if the build was cancelled
+ return;
+ }
+
+ _threadingService.VerifyOnUIThread();
+
+ if (_acceleratedProjectCount != 0)
+ {
+ LogMessage(string.Format(VSResources.BuildAccelerationSummary_2, _acceleratedProjectCount, _accelerationFileCopyCount));
+ }
+
+ var telemetryEvent = new TelemetryEvent(TelemetryEventName.SolutionBuildSummary);
+
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.DurationMillis, _stopwatch.Elapsed.TotalMilliseconds);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.ProjectCount, _projectCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.ConfiguredProjectCount, _configuredProjectCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.UpToDateProjectCount, _upToDateProjectCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.OutOfDateProjectCount, _outOfDateProjectCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.AcceleratedProjectCount, _acceleratedProjectCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.AccelerationCandidateProjectCount, _accelerationCandidateProjectCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.AccelerationFileCopyCount, _accelerationFileCopyCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.AccelerationEnabledCount, _accelerationEnabledCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.AccelerationDisabledCount, _accelerationDisabledCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.AccelerationUnspecifiedCount, _accelerationUnspecifiedCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.FilesCheckedCount, _filesCheckedCount);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.WaitTimeMillis, new TimeSpan(_waitTime).TotalMilliseconds);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.CheckTimeMillis, new TimeSpan(_checkTime).TotalMilliseconds);
+ telemetryEvent.Properties.Add(TelemetryPropertyName.SolutionBuildSummary.LogLevel, _logLevel);
+
+ TelemetryService.DefaultSession.PostEvent(telemetryEvent);
+
+ void LogMessage(string message)
+ {
+ if (_outputWindow.Value.GetPane(VSConstants.GUID_BuildOutputWindowPane, out IVsOutputWindowPane? outputPane) == HResult.OK && outputPane is not null)
+ {
+ outputPane.OutputStringNoPump(message);
+ }
+ }
+ }
+}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/UpToDateCheckBuildEventNotifier.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/UpToDateCheckBuildEventNotifier.cs
index 48d75079535..f8053e28cff 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/UpToDateCheckBuildEventNotifier.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/UpToDate/UpToDateCheckBuildEventNotifier.cs
@@ -62,14 +62,19 @@ protected override Task DisposeCoreAsync(bool initialized)
}
///
- /// Called right before a project configuration starts building.
+ /// Called right before a project configuration starts building. Called even if the project is up-to-date.
///
int IVsUpdateSolutionEvents2.UpdateProjectCfg_Begin(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, ref int pfCancel)
{
- if (IsBuild(dwAction, out _))
+ if (IsBuild(dwAction, out bool isRebuild))
{
IEnumerable? listeners = FindActiveConfiguredProviders(pHierProj, out _);
+ // Notify the solution build listener that a project build is starting.
+ // Note there's no equivalent for build completion, as the fast up-to-date check handles
+ // that for the projects it tracks. We don't need to know when other project types complete.
+ _solutionBuildEventListener.NotifyProjectBuildStarting(isRebuild);
+
if (listeners is not null)
{
var buildStartedTimeUtc = DateTime.UtcNow;
@@ -85,7 +90,7 @@ int IVsUpdateSolutionEvents2.UpdateProjectCfg_Begin(IVsHierarchy pHierProj, IVsC
}
///
- /// Called right after a project configuration is finished building.
+ /// Called right after a project configuration is finished building. Called even if the project is up-to-date.
///
int IVsUpdateSolutionEvents2.UpdateProjectCfg_Done(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, int fSuccess, int fCancel)
{
@@ -149,20 +154,20 @@ private static bool IsBuild(uint options, out bool isRebuild)
int IVsUpdateSolutionEvents.UpdateSolution_StartUpdate(ref int pfCancelUpdate)
{
- _solutionBuildEventListener.NotifySolutionBuildStarting(DateTime.UtcNow);
+ _solutionBuildEventListener.NotifySolutionBuildStarting();
return HResult.OK;
}
int IVsUpdateSolutionEvents.UpdateSolution_Done(int fSucceeded, int fModified, int fCancelCommand)
{
- _solutionBuildEventListener.NotifySolutionBuildCompleted();
+ _solutionBuildEventListener.NotifySolutionBuildCompleted(cancelled: false);
return HResult.OK;
}
int IVsUpdateSolutionEvents.UpdateSolution_Cancel()
{
- _solutionBuildEventListener.NotifySolutionBuildCompleted();
+ _solutionBuildEventListener.NotifySolutionBuildCompleted(cancelled: true);
return HResult.OK;
}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.Designer.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.Designer.cs
index 6dc6aac4352..9d6517f931d 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.Designer.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.Designer.cs
@@ -69,6 +69,15 @@ internal static string ActiveLaunchProfileNotFound {
}
}
+ ///
+ /// Looks up a localized string similar to Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration..
+ ///
+ internal static string BuildAccelerationSummary_2 {
+ get {
+ return ResourceManager.GetString("BuildAccelerationSummary_2", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Component (Windows Forms) Designer.
///
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.resx b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.resx
index a7cf7683f4c..a4e730c7c98 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.resx
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/VSResources.resx
@@ -276,6 +276,10 @@ In order to debug this project, add an executable project to this solution which
WARNING: Potential build performance issue in '{0}'. The project does not appear up-to-date after a successful build: {1}. See https://aka.ms/incremental-build-failure.{0} is the file name of the project. {1} is a description of the failure. The period '.' after {1} is intentional and should be kept.
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+
Adjust namespaces for moved files?
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.cs.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.cs.xlf
index 20a1d90678e..bf2c215dc4f 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.cs.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.cs.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Profil {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.de.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.de.xlf
index 5a870f016a4..36adc0e9ebc 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.de.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.de.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Profil "{0}"
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.es.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.es.xlf
index 27c5a5a6b18..5f769f9e0b7 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.es.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.es.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Perfil {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.fr.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.fr.xlf
index 20cdc3f686b..44329557c9e 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.fr.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.fr.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Profil {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.it.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.it.xlf
index 7450a8b373e..25ae0084897 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.it.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.it.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Profilo {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ja.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ja.xlf
index 5b2bfae22d0..e9dafc09f2b 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ja.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ja.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}プロファイル {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ko.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ko.xlf
index 231309849c6..4f4e10d1bca 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ko.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ko.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}프로필 {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pl.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pl.xlf
index ed6c464f391..eb3a0592c3a 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pl.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pl.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Profil {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pt-BR.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pt-BR.xlf
index 5ef78838500..e17b2282fe0 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pt-BR.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.pt-BR.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Perfil {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ru.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ru.xlf
index d81ef947f92..5dc0c21a405 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ru.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.ru.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}Профиль {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.tr.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.tr.xlf
index 0efca696aa4..e77816b0d69 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.tr.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.tr.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}{0} Profili
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hans.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hans.xlf
index e510c15caed..af7897d3313 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hans.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hans.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}配置文件 {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hant.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hant.xlf
index 9d61b77c825..0fd353e6bf3 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hant.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/xlf/VSResources.zh-Hant.xlf
@@ -2,6 +2,11 @@
+
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ Visual Studio accelerated {0} project(s), copying {1} file(s). See https://aka.ms/vs-build-acceleration.
+ {0} and {1} are both integer counts.
+ Profile {0}設定檔 {0}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildAccelerationResult.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildAccelerationResult.cs
new file mode 100644
index 00000000000..d34691139cb
--- /dev/null
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildAccelerationResult.cs
@@ -0,0 +1,31 @@
+// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
+
+namespace Microsoft.VisualStudio.ProjectSystem.UpToDate;
+
+///
+/// Models the kinds of contributions Build Acceleration can make to a project build.
+///
+internal enum BuildAccelerationResult
+{
+ ///
+ /// Build Acceleration is disabled. A heuristic determined that the project
+ /// would not have been accelerated anyway.
+ ///
+ DisabledNotCandidate,
+
+ ///
+ /// Build Acceleration is disabled. A heuristic determined that the project
+ /// would have been accelerated, if the feature were turned on.
+ ///
+ DisabledCandidate,
+
+ ///
+ /// Build Acceleration is enabled, but the project was not accelerated.
+ ///
+ EnabledNotAccelerated,
+
+ ///
+ /// Build Acceleration is enabled, and the project was accelerated.
+ ///
+ EnabledAccelerated
+}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.Log.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.Log.cs
index 66982b16cd2..4b610aeb321 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.Log.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.Log.cs
@@ -10,6 +10,7 @@ internal sealed partial class BuildUpToDateCheck
internal sealed class Log
{
private readonly TextWriter _writer;
+ private readonly ISolutionBuildEventListener _solutionBuildEventListener;
private readonly Stopwatch _stopwatch;
private readonly TimeSpan _waitTime;
private readonly TimestampCache _timestampCache;
@@ -28,10 +29,11 @@ internal sealed class Log
public string? FailureDescription { get; private set; }
public FileSystemOperationAggregator? FileSystemOperations { get; set; }
- public Log(TextWriter writer, LogLevel requestedLogLevel, Stopwatch stopwatch, TimeSpan waitTime, TimestampCache timestampCache, string projectPath, Guid projectGuid, ITelemetryService? telemetryService, UpToDateCheckConfiguredInput upToDateCheckConfiguredInput, string? ignoreKinds, int checkNumber)
+ public Log(TextWriter writer, LogLevel requestedLogLevel, ISolutionBuildEventListener solutionBuildEventListener, Stopwatch stopwatch, TimeSpan waitTime, TimestampCache timestampCache, string projectPath, Guid projectGuid, ITelemetryService? telemetryService, UpToDateCheckConfiguredInput upToDateCheckConfiguredInput, string? ignoreKinds, int checkNumber)
{
_writer = writer;
Level = requestedLogLevel;
+ _solutionBuildEventListener = solutionBuildEventListener;
_stopwatch = stopwatch;
_waitTime = waitTime;
_timestampCache = timestampCache;
@@ -180,6 +182,17 @@ public bool Fail(string reason, string resourceName, params object[] values)
// Minimal logging only includes failures.
Minimal(resourceName, values);
+ _solutionBuildEventListener.NotifyProjectChecked(
+ upToDate: false,
+ buildAccelerationEnabled: FileSystemOperations.IsAccelerationEnabled,
+ result: FileSystemOperations.AccelerationResult,
+ configurationCount: _upToDateCheckConfiguredInput.ImplicitInputs.Length,
+ copyCount: 0,
+ fileCount: _timestampCache.Count,
+ waitTime: _waitTime,
+ checkTime: _stopwatch.Elapsed,
+ logLevel: Level);
+
// Send telemetry.
_telemetryService?.PostProperties(TelemetryEventName.UpToDateCheckFail, new[]
{
@@ -213,6 +226,17 @@ public void UpToDate(int copyCount)
_stopwatch.Stop();
+ _solutionBuildEventListener.NotifyProjectChecked(
+ upToDate: true,
+ buildAccelerationEnabled: FileSystemOperations.IsAccelerationEnabled,
+ result: FileSystemOperations.AccelerationResult,
+ copyCount: copyCount,
+ configurationCount: _upToDateCheckConfiguredInput.ImplicitInputs.Length,
+ fileCount: _timestampCache.Count,
+ waitTime: _waitTime,
+ checkTime: _stopwatch.Elapsed,
+ logLevel: Level);
+
// Send telemetry.
_telemetryService?.PostProperties(TelemetryEventName.UpToDateCheckSuccess, new[]
{
@@ -247,17 +271,5 @@ public void Dispose()
}
}
}
-
- public enum BuildAccelerationResult
- {
- // Disabled, not candidate
- DisabledNotCandidate,
- // Disabled, candidate
- DisabledCandidate,
- // Enabled, not accelerated
- EnabledNotAccelerated,
- // Enabled, accelerated
- EnabledAccelerated
- }
}
}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.cs
index b11abfb0b27..d5b24495a11 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/BuildUpToDateCheck.cs
@@ -36,7 +36,8 @@ internal sealed partial class BuildUpToDateCheck
internal static readonly StringComparer SetNameComparer = StringComparers.ItemNames;
internal static readonly StringComparer KindNameComparer = StringComparers.ItemNames;
- private readonly ISolutionBuildContext _context;
+ private readonly ISolutionBuildContextProvider _solutionBuildContextProvider;
+ private readonly ISolutionBuildEventListener _solutionBuildEventListener;
private readonly IUpToDateCheckConfiguredInputDataSource _inputDataSource;
private readonly IProjectSystemOptions _projectSystemOptions;
private readonly ConfiguredProject _configuredProject;
@@ -60,7 +61,8 @@ internal sealed partial class BuildUpToDateCheck
[ImportingConstructor]
public BuildUpToDateCheck(
- ISolutionBuildContext context,
+ ISolutionBuildContextProvider solutionBuildContextProvider,
+ ISolutionBuildEventListener solutionBuildEventListener,
IUpToDateCheckConfiguredInputDataSource inputDataSource,
IProjectSystemOptions projectSystemOptions,
ConfiguredProject configuredProject,
@@ -72,7 +74,8 @@ public BuildUpToDateCheck(
IUpToDateCheckHost upToDateCheckHost,
ICopyItemAggregator copyItemAggregator)
{
- _context = context;
+ _solutionBuildContextProvider = solutionBuildContextProvider;
+ _solutionBuildEventListener = solutionBuildEventListener;
_inputDataSource = inputDataSource;
_projectSystemOptions = projectSystemOptions;
_configuredProject = configuredProject;
@@ -720,7 +723,7 @@ private bool CheckBuiltFromInputFiles(Log log, in TimestampCache timestampCache,
private bool CheckCopyToOutputDirectoryItems(Log log, UpToDateCheckImplicitConfiguredInput state, IEnumerable<(string Path, ImmutableArray CopyItems)> copyItemsByProject, ConfiguredFileSystemOperationAggregator fileSystemAggregator, bool? isBuildAccelerationEnabled, CancellationToken token)
{
- ITimestampCache? timestampCache = _context.CopyItemTimestamps;
+ ITimestampCache? timestampCache = _solutionBuildContextProvider.CurrentSolutionBuildContext?.CopyItemTimestamps;
if (timestampCache is null)
{
@@ -865,7 +868,7 @@ async Task IProjectBuildEventListener.NotifyBuildCompletedAsync(bool wasSuccessf
// The project build has completed. We must assume this project modified its outputs,
// so we remove the outputs that were likely modified from our cache. The next requests
// for these files will perform a fresh query.
- _context.CopyItemTimestamps?.ClearTimestamps(_lastCopyTargetsFromThisProject);
+ _solutionBuildContextProvider.CurrentSolutionBuildContext?.CopyItemTimestamps?.ClearTimestamps(_lastCopyTargetsFromThisProject);
// We don't use this again after clearing the cache, so release it for GC.
_lastCopyTargetsFromThisProject = null;
@@ -970,6 +973,7 @@ private async Task IsUpToDateInternalAsync(
var logger = new Log(
logWriter,
requestedLogLevel,
+ _solutionBuildEventListener,
sw,
waitTime,
timestampCache,
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildContext.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildContext.cs
deleted file mode 100644
index 46faf696fba..00000000000
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildContext.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
-
-namespace Microsoft.VisualStudio.ProjectSystem.UpToDate;
-
-///
-/// A context for the up-to-date check with the lifetime of the solution build, which
-/// may span multiple project builds.
-///
-internal interface ISolutionBuildContext
-{
- ///
- /// A cache of timestamps for the absolute paths of both source and target of copy items
- /// across all projects.
- ///
- ///
- /// In large solutions we end up checking many, many copy items. These items get their
- /// own cache that lasts the duration of the solution build, rather than the default cache
- /// which only lasts for the project build. This cache has a high hit rate. As project
- /// builds complete, we clear each project's output items from the cache so that we re-query
- /// them on the next call.
- ///
- ITimestampCache? CopyItemTimestamps { get; }
-}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildContextProvider.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildContextProvider.cs
new file mode 100644
index 00000000000..da5e30ae979
--- /dev/null
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildContextProvider.cs
@@ -0,0 +1,9 @@
+// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
+
+namespace Microsoft.VisualStudio.ProjectSystem.UpToDate;
+
+[ProjectSystemContract(ProjectSystemContractScope.ProjectService, ProjectSystemContractProvider.Private, Cardinality = Composition.ImportCardinality.ExactlyOne)]
+internal interface ISolutionBuildContextProvider
+{
+ SolutionBuildContext? CurrentSolutionBuildContext { get; }
+}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildEventListener.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildEventListener.cs
index 2ec2fd9de58..889b7e1168c 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildEventListener.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/ISolutionBuildEventListener.cs
@@ -13,7 +13,7 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate;
/// We track solution builds to reset various state in the up-to-date check, such as timestamp caches.
///
///
-[ProjectSystemContract(ProjectSystemContractScope.Global, ProjectSystemContractProvider.Private, Cardinality = Composition.ImportCardinality.ExactlyOne)]
+[ProjectSystemContract(ProjectSystemContractScope.ProjectService, ProjectSystemContractProvider.Private, Cardinality = Composition.ImportCardinality.ExactlyOne)]
internal interface ISolutionBuildEventListener
{
///
@@ -22,7 +22,32 @@ internal interface ISolutionBuildEventListener
///
/// Must be called for both builds for rebuilds.
///
- void NotifySolutionBuildStarting(DateTime buildStartTimeUtc);
+ void NotifySolutionBuildStarting();
+
+ ///
+ /// Called when the up-to-date check for a project completes.
+ ///
+ ///
+ /// Is only called for .NET Project System projects.
+ ///
+ void NotifyProjectChecked(
+ bool upToDate,
+ bool? buildAccelerationEnabled,
+ BuildAccelerationResult result,
+ int configurationCount,
+ int copyCount,
+ int fileCount,
+ TimeSpan waitTime,
+ TimeSpan checkTime,
+ LogLevel logLevel);
+
+ ///
+ /// Called when a project build is starting, after .
+ ///
+ ///
+ /// Must be called for both builds for rebuilds.
+ ///
+ void NotifyProjectBuildStarting(bool isRebuild);
///
/// Called when a solution build completes.
@@ -30,5 +55,5 @@ internal interface ISolutionBuildEventListener
///
/// Must be called for both builds for rebuilds.
///
- void NotifySolutionBuildCompleted();
+ void NotifySolutionBuildCompleted(bool cancelled);
}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/SolutionBuildContext.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/SolutionBuildContext.cs
index 708cffa3764..f4af5ccb854 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/SolutionBuildContext.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/UpToDate/SolutionBuildContext.cs
@@ -4,30 +4,28 @@
namespace Microsoft.VisualStudio.ProjectSystem.UpToDate;
-///
-[Export(typeof(ISolutionBuildEventListener))]
-[Export(typeof(ISolutionBuildContext))]
-internal sealed class SolutionBuildContext : ISolutionBuildEventListener, ISolutionBuildContext
+///
+/// A context for the up-to-date check with the lifetime of the solution build, which
+/// may span multiple project builds.
+///
+internal sealed class SolutionBuildContext
{
- private readonly IFileSystem _fileSystem;
- public ITimestampCache? CopyItemTimestamps { get; private set; }
+ ///
+ /// A cache of timestamps for the absolute paths of both source and target of copy items
+ /// across all projects.
+ ///
+ ///
+ /// In large solutions we end up checking many, many copy items. These items get their
+ /// own cache that lasts the duration of the solution build, rather than the default cache
+ /// which only lasts for the project build. This cache has a high hit rate. As project
+ /// builds complete, we clear each project's output items from the cache so that we re-query
+ /// them on the next call.
+ ///
+ public ITimestampCache CopyItemTimestamps { get; }
- [ImportingConstructor]
public SolutionBuildContext(IFileSystem fileSystem)
{
- _fileSystem = fileSystem;
- }
-
- public void NotifySolutionBuildStarting(DateTime buildStartTimeUtc)
- {
- // Initialize a new timestamp cache for both sources and targets of copy items.
- CopyItemTimestamps = new ConcurrentTimestampCache(_fileSystem);
- }
-
- public void NotifySolutionBuildCompleted()
- {
- // There may be many items in this collection. We don't have to retain them, so free them here.
- CopyItemTimestamps = null;
+ CopyItemTimestamps = new ConcurrentTimestampCache(fileSystem);
}
}
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.Designer.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.Designer.cs
index 120be352b24..a5a7d02c484 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.Designer.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.Designer.cs
@@ -151,7 +151,7 @@ internal static string FrameworkNodeName {
}
///
- /// Looks up a localized string similar to This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'..
+ /// Looks up a localized string similar to This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration..
///
internal static string FUTD_AccelerationCandidate {
get {
@@ -169,7 +169,7 @@ internal static string FUTD_AccelerationDisabledCopyItemsIncomplete {
}
///
- /// Looks up a localized string similar to Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property..
+ /// Looks up a localized string similar to Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration..
///
internal static string FUTD_AccelerationDisabledForProject {
get {
@@ -412,7 +412,7 @@ internal static string FUTD_CopyAlwaysItemsDiffer_6 {
}
///
- /// Looks up a localized string similar to Copying {0} files to accelerate build:.
+ /// Looks up a localized string similar to Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):.
///
internal static string FUTD_CopyingFilesToAccelerateBuild_1 {
get {
@@ -745,7 +745,7 @@ internal static string FUTD_WriteTimeOnOutputMarker_2 {
}
///
- /// Looks up a localized string similar to Build acceleration data is unavailable for project with target '{0}'..
+ /// Looks up a localized string similar to Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration..
///
internal static string FUTDC_AccelerationDataMissingForProject_1 {
get {
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.resx b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.resx
index 0e099cf32a5..7e0bc75da81 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.resx
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Resources.resx
@@ -423,7 +423,7 @@ This project was loaded using the wrong project type, likely as a result of rena
{0} and {1} are file paths.
- Copying {0} files to accelerate build:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):{0} is an integer.
@@ -442,18 +442,18 @@ This project was loaded using the wrong project type, likely as a result of rena
Input marker does not exist.
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.Do not translate AccelerateBuildsInVisualStudio.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.Build acceleration is not available for this project because not all transitively referenced projects have provided acceleration data.
- Build acceleration data is unavailable for project with target '{0}'.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.{0} is a file path.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryEventName.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryEventName.cs
index 3d5d20d4cd5..6230398b7c3 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryEventName.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryEventName.cs
@@ -76,6 +76,11 @@ internal static class TelemetryEventName
///
public const string IncrementalBuildValidationFailureDisplayed = "vs/projectsystem/managed/incrementalbuild/validationfailure/displayed";
+ ///
+ /// Contains a summary of the solution build, from the perspective of the .NET Project System.
+ ///
+ public const string SolutionBuildSummary = "vs/projectsystem/managed/incrementalbuild/solutionbuildsummary";
+
///
/// Indicates that the NuGet restore detected a cycle.
///
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryPropertyName.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryPropertyName.cs
index 514a4988dbf..5290071191a 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryPropertyName.cs
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/Telemetry/TelemetryPropertyName.cs
@@ -86,6 +86,91 @@ public static class UpToDateCheck
public const string AcceleratedCopyCount = "vs.projectsystem.managed.uptodatecheck.acceleratedcopycount";
}
+ public static class SolutionBuildSummary
+ {
+ ///
+ /// Indicates the duration of the solution build, in milliseconds.
+ ///
+ public const string DurationMillis = "vs.projectsystem.managed.solutionbuildsummary.durationmillis";
+
+ ///
+ /// Indicates the total number of projects that participated in the solution build.
+ ///
+ public const string ProjectCount = "vs.projectsystem.managed.solutionbuildsummary.projectcount";
+
+ ///
+ /// Indicates the total number of configured projects that participated in the solution build.
+ /// This can help understand the impact of multi-targeting projects.
+ ///
+ public const string ConfiguredProjectCount = "vs.projectsystem.managed.solutionbuildsummary.configuredprojectcount";
+
+ ///
+ /// Indicates the number of projects backed by the .NET Project System that were considered up-to-date and therefore skipped.
+ /// Excludes accelerated projects and those found out-of-date.
+ ///
+ public const string UpToDateProjectCount = "vs.projectsystem.managed.solutionbuildsummary.uptodateprojectcount";
+
+ ///
+ /// Indicates the number of projects backed by the .NET Project System that were considered out-to-date and therefore built.
+ /// Excludes accelerated projects and those found up-to-date.
+ ///
+ public const string OutOfDateProjectCount = "vs.projectsystem.managed.solutionbuildsummary.outofdateprojectcount";
+
+ ///
+ /// Indicates the number of projects backed by the .NET Project System that were accelerated rather than built,
+ /// meaning that VS performed the build operation rather than MSBuild.
+ ///
+ public const string AcceleratedProjectCount = "vs.projectsystem.managed.solutionbuildsummary.acceleratedprojectcount";
+
+ ///
+ /// Indicates the number of projects in the solution build that were identified as candidates for acceleration.
+ ///
+ public const string AccelerationCandidateProjectCount = "vs.projectsystem.managed.solutionbuildsummary.accelerationcandidateprojectcount";
+
+ ///
+ /// Indicates the number of files that were copied as part of Build Acceleration.
+ /// If no projects were accelerated, this value will be zero.
+ ///
+ public const string AccelerationFileCopyCount = "vs.projectsystem.managed.solutionbuildsummary.accelerationfilecopycount";
+
+ ///
+ /// Indicates the number of project for which build acceleration was explicitly enabled.
+ ///
+ public const string AccelerationEnabledCount = "vs.projectsystem.managed.solutionbuildsummary.accelerationenabledcount";
+
+ ///
+ /// Indicates the number of project for which build acceleration was explicitly disabled.
+ ///
+ public const string AccelerationDisabledCount = "vs.projectsystem.managed.solutionbuildsummary.accelerationdisabledcount";
+
+ ///
+ /// Indicates the number of project for which build acceleration was neither explicitly enabled or disabled.
+ ///
+ public const string AccelerationUnspecifiedCount = "vs.projectsystem.managed.solutionbuildsummary.accelerationunspecifiedcount";
+
+ ///
+ /// Indicates the number of file timestamps inspected by the fast up-to-date checks, across all projects in the solution build.
+ ///
+ public const string FilesCheckedCount = "vs.projectsystem.managed.solutionbuildsummary.filescheckedcount";
+
+ ///
+ /// Indicates the amount of time the fast up-to-date check spent waiting for project data to be available via asynchronous dataflow.
+ ///
+ public const string WaitTimeMillis = "vs.projectsystem.managed.solutionbuildsummary.waittimemillis";
+
+ ///
+ /// Indicates the total amount of time spent within the fast up-to-date check across all projects in the solution build.
+ /// Note that this is the sum of the time spent for each project, however those times may have overlapped during the
+ /// solution build, and have executed concurrently.
+ ///
+ public const string CheckTimeMillis = "vs.projectsystem.managed.solutionbuildsummary.checktimemillis";
+
+ ///
+ /// Indicates the fast up-to-date check log level selected for the solution build.
+ ///
+ public const string LogLevel = "vs.projectsystem.managed.solutionbuildsummary.loglevel";
+ }
+
public static class TreeUpdated
{
///
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.cs.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.cs.xlf
index f31de1d955d..3e1eb42f2d1 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.cs.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.cs.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Data akcelerace sestavení nejsou pro projekt s cílem {0} k dispozici.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Data akcelerace sestavení nejsou pro projekt s cílem {0} k dispozici.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Zdá se, že tento projekt je kandidátem na akceleraci sestavení. Pro přihlášení nastavte vlastnost MSBuild AccelerateBuildsInVisualStudio na hodnotu true.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Zdá se, že tento projekt je kandidátem na akceleraci sestavení. Pro přihlášení nastavte vlastnost MSBuild AccelerateBuildsInVisualStudio na hodnotu true.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- Akcelerace sestavení je pro tento projekt zakázaná prostřednictvím vlastnosti MSBuild AccelerateBuildsInVisualStudio.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ Akcelerace sestavení je pro tento projekt zakázaná prostřednictvím vlastnosti MSBuild AccelerateBuildsInVisualStudio.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Kopírování {0} souborů pro zrychlení sestavení:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Kopírování {0} souborů pro zrychlení sestavení:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.de.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.de.xlf
index d5a816f69e6..51a31e8b5f9 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.de.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.de.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Buildbeschleunigungsdaten sind für das Projekt mit dem Ziel "{0}" nicht verfügbar.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Buildbeschleunigungsdaten sind für das Projekt mit dem Ziel "{0}" nicht verfügbar.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Dieses Projekt scheint ein Kandidat für die Buildbeschleunigung zu sein. Um sich zu entscheiden, legen Sie die MSBuild-Eigenschaft "AccelerateBuildsInVisualStudio" auf "true" fest.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Dieses Projekt scheint ein Kandidat für die Buildbeschleunigung zu sein. Um sich zu entscheiden, legen Sie die MSBuild-Eigenschaft "AccelerateBuildsInVisualStudio" auf "true" fest.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- Die Buildbeschleunigung ist für dieses Projekt über die MSBuild-Eigenschaft "AccelerateBuildsInVisualStudio" deaktiviert.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ Die Buildbeschleunigung ist für dieses Projekt über die MSBuild-Eigenschaft "AccelerateBuildsInVisualStudio" deaktiviert.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- {0} Dateien werden kopiert, um den Buildvorgang zu beschleunigen:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ {0} Dateien werden kopiert, um den Buildvorgang zu beschleunigen:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.es.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.es.xlf
index c8140964cf4..78108c888e7 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.es.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.es.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Los datos de aceleración de compilación no están disponibles para el proyecto con el destino '{0}'.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Los datos de aceleración de compilación no están disponibles para el proyecto con el destino '{0}'.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Este proyecto parece ser candidato para la aceleración de compilación. Para participar, establezca la propiedad 'AccelerateBuildsInVisualStudio' de MSBuild en 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Este proyecto parece ser candidato para la aceleración de compilación. Para participar, establezca la propiedad 'AccelerateBuildsInVisualStudio' de MSBuild en 'true'.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- La aceleración de compilación está deshabilitada para este proyecto a través de la propiedad 'AccelerateBuildsInVisualStudio' de MSBuild.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ La aceleración de compilación está deshabilitada para este proyecto a través de la propiedad 'AccelerateBuildsInVisualStudio' de MSBuild.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Copiando {0} archivos para acelerar la compilación:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Copiando {0} archivos para acelerar la compilación:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.fr.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.fr.xlf
index 623ff877a58..848890ff328 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.fr.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.fr.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Les données d’accélération de build ne sont pas disponibles pour le projet avec la cible « {0} ».
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Les données d’accélération de build ne sont pas disponibles pour le projet avec la cible « {0} ».{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Ce projet semble être un candidat pour l’accélération de build. Pour y participer, définissez la propriété MSBuild « AccelerateBuildsInVisualStudio » sur « true ».
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Ce projet semble être un candidat pour l’accélération de build. Pour y participer, définissez la propriété MSBuild « AccelerateBuildsInVisualStudio » sur « true ».Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- L’accélération de build est désactivée pour ce projet via la propriété MSBuilds « AccelerateBuildsInVisualStudio ».
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ L’accélération de build est désactivée pour ce projet via la propriété MSBuilds « AccelerateBuildsInVisualStudio ».Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Copie des fichiers {0} pour accélérer la génération :
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Copie des fichiers {0} pour accélérer la génération :{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.it.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.it.xlf
index 7be6f103df1..b91fa5a0bf8 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.it.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.it.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- I dati di accelerazione della compilazione non sono disponibili per il progetto con destinazione '{0}'.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ I dati di accelerazione della compilazione non sono disponibili per il progetto con destinazione '{0}'.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Questo progetto sembra un candidato per l'accelerazione della compilazione. Per acconsentire esplicitamente, impostare la proprietà 'AccelerateBuildsInVisualStudio' di MSBuild su 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Questo progetto sembra un candidato per l'accelerazione della compilazione. Per acconsentire esplicitamente, impostare la proprietà 'AccelerateBuildsInVisualStudio' di MSBuild su 'true'.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- L'accelerazione della compilazione è disabilitata per questo progetto tramite la proprietà MSBuild 'AccelerateBuildsInVisualStudio'.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ L'accelerazione della compilazione è disabilitata per questo progetto tramite la proprietà MSBuild 'AccelerateBuildsInVisualStudio'.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Copia dei file {0} per accelerare la compilazione:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Copia dei file {0} per accelerare la compilazione:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ja.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ja.xlf
index 074696e41f2..59b75b01dd6 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ja.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ja.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- ビルド アクセラレーション データは、ターゲット '{0}' のプロジェクトでは利用できません。
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ ビルド アクセラレーション データは、ターゲット '{0}' のプロジェクトでは利用できません。{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- このプロジェクトは、ビルド アクセラレーションの候補のようです。オプトインするには、'AccelerateBuildsInVisualStudio' MSBuild プロパティを 'true' に設定します。
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ このプロジェクトは、ビルド アクセラレーションの候補のようです。オプトインするには、'AccelerateBuildsInVisualStudio' MSBuild プロパティを 'true' に設定します。Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- 'AccelerateBuildsInVisualStudio' MSBuild プロパティを介して、このプロジェクトのビルド アクセラレーションが無効になっています。
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ 'AccelerateBuildsInVisualStudio' MSBuild プロパティを介して、このプロジェクトのビルド アクセラレーションが無効になっています。Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- ビルドを高速化するために {0} 個のファイルをコピーしています:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ ビルドを高速化するために {0} 個のファイルをコピーしています:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ko.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ko.xlf
index b748eb943c0..6742acdddfe 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ko.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ko.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- 대상이 '{0}'인 프로젝트에는 빌드 가속 데이터를 사용할 수 없습니다.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ 대상이 '{0}'인 프로젝트에는 빌드 가속 데이터를 사용할 수 없습니다.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- 이 프로젝트는 빌드 가속을 위한 후보인 것 같습니다. 옵트인하려면 'AccelerateBuildsInVisualStudio' MSBuild 속성을 'true'로 설정하세요.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ 이 프로젝트는 빌드 가속을 위한 후보인 것 같습니다. 옵트인하려면 'AccelerateBuildsInVisualStudio' MSBuild 속성을 'true'로 설정하세요.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- 'AccelerateBuildsInVisualStudio' MSBuild 속성을 사용하는 이 프로젝트에 빌드 가속을 사용할 수 없습니다.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ 'AccelerateBuildsInVisualStudio' MSBuild 속성을 사용하는 이 프로젝트에 빌드 가속을 사용할 수 없습니다.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- 빌드 가속을 위해 {0}개의 파일을 복사하는 중:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ 빌드 가속을 위해 {0}개의 파일을 복사하는 중:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pl.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pl.xlf
index f01940bdd0f..1d705b4912f 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pl.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pl.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Dane przyspieszenia kompilacji są niedostępne dla projektu z elementem docelowym „{0}”.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Dane przyspieszenia kompilacji są niedostępne dla projektu z elementem docelowym „{0}”.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Ten projekt wydaje się być kandydatem do przyspieszenia kompilacji. Aby wyrazić zgodę, ustaw właściwość MSBuild „AccelerateBuildsInVisualStudio” na wartość „true”.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Ten projekt wydaje się być kandydatem do przyspieszenia kompilacji. Aby wyrazić zgodę, ustaw właściwość MSBuild „AccelerateBuildsInVisualStudio” na wartość „true”.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- Przyspieszanie kompilacji jest wyłączone dla tego projektu za pomocą właściwości MSBuild „AccelerateBuildsInVisualStudio”.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ Przyspieszanie kompilacji jest wyłączone dla tego projektu za pomocą właściwości MSBuild „AccelerateBuildsInVisualStudio”.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Kopiowanie {0} plików, aby przyspieszyć kompilację:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Kopiowanie {0} plików, aby przyspieszyć kompilację:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pt-BR.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pt-BR.xlf
index b023451e2de..990778c70c7 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pt-BR.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.pt-BR.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Os dados de aceleração de compilação não estão disponíveis para o projeto com destino '{0}'.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Os dados de aceleração de compilação não estão disponíveis para o projeto com destino '{0}'.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Este projeto parece ser um candidato para aceleração de construção. Para aceitar, defina a propriedade MSBuild 'AccelerateBuildsInVisualStudio' como 'verdadeiro'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Este projeto parece ser um candidato para aceleração de construção. Para aceitar, defina a propriedade MSBuild 'AccelerateBuildsInVisualStudio' como 'verdadeiro'.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- A aceleração de compilação está desabilitada para este projeto por meio da propriedade MSBuild 'AccelerateBuildsInVisualStudio'.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ A aceleração de compilação está desabilitada para este projeto por meio da propriedade MSBuild 'AccelerateBuildsInVisualStudio'.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Copiando arquivos {0} para acelerar a compilação:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Copiando arquivos {0} para acelerar a compilação:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ru.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ru.xlf
index a94b01532f7..631f6b2801d 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ru.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.ru.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Данные ускорения построения недоступны для проекта с целевым объектом "{0}".
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Данные ускорения построения недоступны для проекта с целевым объектом "{0}".{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Этот проект является кандидатом на ускорение построения. Чтобы согласиться, задайте для свойства MSBuild "AccelerateBuildsInVisualStudio" значение "true".
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Этот проект является кандидатом на ускорение построения. Чтобы согласиться, задайте для свойства MSBuild "AccelerateBuildsInVisualStudio" значение "true".Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- Ускорение построения отключено для этого проекта с помощью свойства MSBuild "AccelerateBuildsInVisualStudio".
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ Ускорение построения отключено для этого проекта с помощью свойства MSBuild "AccelerateBuildsInVisualStudio".Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Копирование файлов ({0}) для ускорения построения:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Копирование файлов ({0}) для ускорения построения:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.tr.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.tr.xlf
index c338b22dc23..2d386c8f19b 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.tr.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.tr.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- Derleme hızlandırma verileri, '{0}' hedefi olan proje için kullanılamıyor.
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ Derleme hızlandırma verileri, '{0}' hedefi olan proje için kullanılamıyor.{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- Bu proje, derleme hızlandırma için bir aday gibi görünüyor. Kabul etmek için 'AccelerateBuildsInVisualStudio' MSBuild özelliğini “true” olarak ayarlayın.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ Bu proje, derleme hızlandırma için bir aday gibi görünüyor. Kabul etmek için 'AccelerateBuildsInVisualStudio' MSBuild özelliğini “true” olarak ayarlayın.Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- Derleme hızlandırma, 'AccelerateBuildsInVisualStudio' MSBuild özelliği aracılığıyla bu proje için devre dışı bırakıldı.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ Derleme hızlandırma, 'AccelerateBuildsInVisualStudio' MSBuild özelliği aracılığıyla bu proje için devre dışı bırakıldı.Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- Derlemeyi hızlandırmak için {0} dosya kopyalanıyor:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ Derlemeyi hızlandırmak için {0} dosya kopyalanıyor:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hans.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hans.xlf
index afaa4843735..6797ffba825 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hans.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hans.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- 对于目标为“{0}”的项目,生成加速数据不可用。
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ 对于目标为“{0}”的项目,生成加速数据不可用。{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- 此项目似乎是生成加速的候选项。若要选择加入,请将“AccelerateBuildsInVisualStudio”MSBuild 属性设置为“true”。
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ 此项目似乎是生成加速的候选项。若要选择加入,请将“AccelerateBuildsInVisualStudio”MSBuild 属性设置为“true”。Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- 通过“AccelerateBuildsInVisualStudio”MSBuild 属性禁用此项目的生成加速。
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ 通过“AccelerateBuildsInVisualStudio”MSBuild 属性禁用此项目的生成加速。Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- 正在复制 {0} 文件以加速生成:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ 正在复制 {0} 文件以加速生成:{0} is an integer.
diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hant.xlf b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hant.xlf
index 9b8aa493b33..a4175e36833 100644
--- a/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hant.xlf
+++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed/xlf/Resources.zh-Hant.xlf
@@ -23,8 +23,8 @@
Indicates that a diagnostic (i.e. a compiler warning) should be kept as a warning rather than disabled or promoted to an error.
- Build acceleration data is unavailable for project with target '{0}'.
- 具有目標 '{0}' 的專案無法使用建置加速資料。
+ Build acceleration data is unavailable for project with target '{0}'. See https://aka.ms/vs-build-acceleration.
+ 具有目標 '{0}' 的專案無法使用建置加速資料。{0} is a file path.
@@ -33,8 +33,8 @@
{0} is a file path.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
- 此專案似乎是建置加速的候選項目。若要加入,請將 'AccelerateBuildsInVisualStudio' MSBuild 屬性設定為 'true'。
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
+ 此專案似乎是建置加速的候選項目。若要加入,請將 'AccelerateBuildsInVisualStudio' MSBuild 屬性設定為 'true'。Do not translate 'AccelerateBuildsInVisualStudio' or 'true'.
@@ -43,8 +43,8 @@
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
- 已透過 'AccelerateBuildsInVisualStudio' MSBuild 屬性停用此專案的建置加速。
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
+ 已透過 'AccelerateBuildsInVisualStudio' MSBuild 屬性停用此專案的建置加速。Do not translate AccelerateBuildsInVisualStudio.
@@ -178,8 +178,8 @@
Do not translate CopyToOutputDirectory="Always". {0} and {3} are file paths. {1} and {4} are date times. {2} and {5} are byte counts.
- Copying {0} files to accelerate build:
- 正在複製 {0} 個檔案以加速建置:
+ Copying {0} files to accelerate build (https://aka.ms/vs-build-acceleration):
+ 正在複製 {0} 個檔案以加速建置:{0} is an integer.
diff --git a/tests/Microsoft.VisualStudio.ProjectSystem.Managed.UnitTests/ProjectSystem/UpToDate/BuildUpToDateCheckTests.cs b/tests/Microsoft.VisualStudio.ProjectSystem.Managed.UnitTests/ProjectSystem/UpToDate/BuildUpToDateCheckTests.cs
index abad65322ce..b59861b5f13 100644
--- a/tests/Microsoft.VisualStudio.ProjectSystem.Managed.UnitTests/ProjectSystem/UpToDate/BuildUpToDateCheckTests.cs
+++ b/tests/Microsoft.VisualStudio.ProjectSystem.Managed.UnitTests/ProjectSystem/UpToDate/BuildUpToDateCheckTests.cs
@@ -42,7 +42,8 @@ public sealed class BuildUpToDateCheckTests : BuildUpToDateCheckTestBase, IDispo
private bool _isCopyItemsComplete = true;
private UpToDateCheckConfiguredInput? _state;
- private ITimestampCache? _copyItemTimestamps;
+ private SolutionBuildContext? _currentSolutionBuildContext;
+ private bool _expectedUpToDate;
public BuildUpToDateCheckTests(ITestOutputHelper output)
{
@@ -99,13 +100,42 @@ public BuildUpToDateCheckTests(ITestOutputHelper output)
var copyItemAggregator = new Mock(MockBehavior.Strict);
copyItemAggregator.Setup(o => o.TryGatherCopyItemsForProject(It.IsAny(), It.IsAny())).Returns(() => (_copyItems, _isCopyItemsComplete));
- _copyItemTimestamps = new ConcurrentTimestampCache(_fileSystem);
-
- var solutionBuildContext = new Mock(MockBehavior.Strict);
- solutionBuildContext.SetupGet(o => o.CopyItemTimestamps).Returns(() => _copyItemTimestamps);
+ _currentSolutionBuildContext = new SolutionBuildContext(_fileSystem);
+
+ var solutionBuildContextProvider = new Mock(MockBehavior.Strict);
+ solutionBuildContextProvider.SetupGet(o => o.CurrentSolutionBuildContext).Returns(() => _currentSolutionBuildContext);
+
+ var solutionBuildEventListener = new Mock(MockBehavior.Strict);
+ solutionBuildEventListener.Setup(
+ o => o.NotifyProjectChecked(
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny(),
+ It.IsAny()))
+ .Callback((
+ bool upToDate,
+ bool? buildAccelerationEnabled,
+ BuildAccelerationResult result,
+ int configurationCount,
+ int copyCount,
+ int fileCount,
+ TimeSpan totalTime,
+ TimeSpan waitTime,
+ LogLevel logLevel) =>
+ {
+ Assert.Equal(_expectedUpToDate, upToDate);
+ Assert.Equal(_logLevel, logLevel);
+ Assert.Equal(_isBuildAccelerationEnabled, buildAccelerationEnabled);
+ });
_buildUpToDateCheck = new BuildUpToDateCheck(
- solutionBuildContext.Object,
+ solutionBuildContextProvider.Object,
+ solutionBuildEventListener.Object,
inputDataSource.Object,
projectSystemOptions.Object,
configuredProject.Object,
@@ -754,7 +784,7 @@ Project is up-to-date.
{
await AssertUpToDateAsync(
$"""
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
Comparing timestamps of inputs and outputs:
No build outputs defined.
Comparing timestamps of copy marker inputs and outputs:
@@ -825,7 +855,7 @@ public async Task IsUpToDateAsync_False_CopyReference_InputNewerThanMarkerOutput
{
await AssertNotUpToDateAsync(
$"""
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
Comparing timestamps of inputs and outputs:
No build outputs defined.
Comparing timestamps of copy marker inputs and outputs:
@@ -847,7 +877,7 @@ No build outputs defined.
Adding input reference copy markers:
Reference1OriginalPath
Input marker 'Reference1OriginalPath' is newer ({ToLocalTime(originalTime)}) than output marker 'C:\Dev\Solution\Project\OutputMarker' ({ToLocalTime(outputTime)}), not up-to-date.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
""",
"InputMarkerNewerThanOutputMarker");
}
@@ -1601,7 +1631,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath2}'
Destination {ToLocalTime(destinationTime)}: '{destinationPath2}'
Remembering the need to copy file '{sourcePath2}' to '{destinationPath2}'.
- Copying 2 files to accelerate build:
+ Copying 2 files to accelerate build (https://aka.ms/vs-build-acceleration):
From '{sourcePath1}' to '{destinationPath1}'.
From '{sourcePath2}' to '{destinationPath2}'.
Build acceleration copied 2 files.
@@ -1612,7 +1642,7 @@ Project is up-to-date.
{
await AssertNotUpToDateAsync(
$"""
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
Comparing timestamps of inputs and outputs:
No build outputs defined.
Checking items to copy to the output directory:
@@ -1636,7 +1666,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath1}'
Destination {ToLocalTime(destinationTime)}: '{destinationPath1}'
Item with CopyToOutputDirectory="PreserveNewest" source '{sourcePath1}' is newer than destination '{destinationPath1}', not up-to-date.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
""",
"CopyToOutputDirectorySourceNewer");
}
@@ -1687,7 +1717,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath2}'
Destination {ToLocalTime(destinationTime)}: '{destinationPath2}'
Remembering the need to copy file '{sourcePath2}' to '{destinationPath2}'.
- Copying 2 files to accelerate build:
+ Copying 2 files to accelerate build (https://aka.ms/vs-build-acceleration):
From '{sourcePath1}' to '{destinationPath1}'.
From '{sourcePath2}' to '{destinationPath2}'.
Build acceleration copied 2 files.
@@ -1698,7 +1728,7 @@ Project is up-to-date.
{
await AssertNotUpToDateAsync(
$"""
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
Comparing timestamps of inputs and outputs:
No build outputs defined.
Checking items to copy to the output directory:
@@ -1722,7 +1752,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath1}'
Destination {ToLocalTime(destinationTime)}: '{destinationPath1}'
Item with CopyToOutputDirectory="PreserveNewest" source '{sourcePath1}' is newer than destination '{destinationPath1}', not up-to-date.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
""",
"CopyToOutputDirectorySourceNewer");
}
@@ -1776,7 +1806,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath2}'
Destination {ToLocalTime(destinationTime)}: '{destinationPath2}'
Remembering the need to copy file '{sourcePath2}' to '{destinationPath2}'.
- Copying 2 files to accelerate build:
+ Copying 2 files to accelerate build (https://aka.ms/vs-build-acceleration):
From '{sourcePath1}' to '{destinationPath1}'.
From '{sourcePath2}' to '{destinationPath2}'.
Build acceleration copied 2 files.
@@ -1787,7 +1817,7 @@ Project is up-to-date.
{
await AssertNotUpToDateAsync(
$"""
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
Comparing timestamps of inputs and outputs:
No build outputs defined.
Checking items to copy to the output directory:
@@ -1811,7 +1841,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath1}'
Destination {ToLocalTime(destinationTime)}: '{destinationPath1}'
Item with CopyToOutputDirectory="PreserveNewest" source '{sourcePath1}' is newer than destination '{destinationPath1}', not up-to-date.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
""",
"CopyToOutputDirectorySourceNewer");
}
@@ -1892,7 +1922,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath2}'
Destination '{destinationPath2}' does not exist.
Remembering the need to copy file '{sourcePath2}' to '{destinationPath2}'.
- Copying 2 files to accelerate build:
+ Copying 2 files to accelerate build (https://aka.ms/vs-build-acceleration):
From '{sourcePath1}' to '{destinationPath1}'.
From '{sourcePath2}' to '{destinationPath2}'.
Build acceleration copied 2 files.
@@ -1903,7 +1933,7 @@ Project is up-to-date.
{
await AssertNotUpToDateAsync(
$"""
- Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
+ Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property. See https://aka.ms/vs-build-acceleration.
Comparing timestamps of inputs and outputs:
No build outputs defined.
Checking items to copy to the output directory:
@@ -1927,7 +1957,7 @@ Checking PreserveNewest item
Source {ToLocalTime(sourceTime)}: '{sourcePath1}'
Destination '{destinationPath1}' does not exist.
Destination '{destinationPath1}' does not exist, not up-to-date.
- This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
+ This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'. See https://aka.ms/vs-build-acceleration.
""",
"CopyToOutputDirectoryDestinationNotFound");
}
@@ -2058,6 +2088,8 @@ private static string ToLocalTime(DateTime time)
private async Task AssertNotUpToDateAsync(string? expectedLogOutput = null, string? telemetryReason = null, BuildAction buildAction = BuildAction.Build, string ignoreKinds = "", string targetFramework = "")
{
+ _expectedUpToDate = false;
+
var writer = new AssertWriter(_output, expectedLogOutput ?? "");
var isUpToDate = await _buildUpToDateCheck.IsUpToDateAsync(buildAction, writer, CreateGlobalProperties(ignoreKinds, targetFramework));
@@ -2086,6 +2118,8 @@ private async Task AssertNotUpToDateAsync(string? expectedLogOutput = null, stri
private async Task AssertUpToDateAsync(string expectedLogOutput, string ignoreKinds = "", string targetFramework = "")
{
+ _expectedUpToDate = true;
+
var writer = new AssertWriter(_output, expectedLogOutput);
bool isUpToDate = await _buildUpToDateCheck.IsUpToDateAsync(BuildAction.Build, writer, CreateGlobalProperties(ignoreKinds, targetFramework));