Skip to content

Commit f744eb5

Browse files
JanKrivanekladipromaridematteYuliiaKovalovaf-alizada
authored
Analyzers prototype proposal (#9735)
* Initial demonstration version * Make analyzer test use bootstrap properly (#9733) * Hook analyzers stats stub * Fix unit tests by explicitly opting into analysis * Disable build acceleration for MSBuild.Bootstrap * Make EndToEndTests disposable * Support running Analyzers.UnitTests from stage1 * Fix MSBuild.dll casing * Don't run netfx Analyzer.UnitTests in Windows Core builds * Fix Analyzers.UnitTests on Mac * Renaming changes * Renaming for clarity (#9754) * Removing unnecessary types * Code move * Adjust namespaces * Simplify TestEnvironments in EndToEndTests * Support for per-project configuration, Acquisition mounting, etc * Add more comments * Grace handle double initialization attempts * Fix tests * Troubleshoot test, comment * Reflect PR comments * Fix build * Fix build - proper multitargeting on core builds * Adjust API naming and exposure * Add forgotten acquisition data sending * Renaming BuildCop to BuildCheck (#9893) We decided to rename the analyzer project from BuildCop to BuildCheck. This PR is just reflecting that on the code. * Renamed a few files missed (#9900) * Add template for custom analyzers (#9789) * Run tests against just-built bootstrap environment * Reflecting PR comments * Add test without analysis * Rename tests project * Force case renaming * Simplify GlobalInstance initialization * Remove multiple registrations checking * Reflect on PR feedback * Apply suggestions from code review Co-authored-by: Mariana Dematte <[email protected]> * Reflect on PR comments * Update src/Build/BuildCheck/API/BuildAnalyzerRule.cs Co-authored-by: Farhad Alizada <[email protected]> * Reflect PR comments --------- Co-authored-by: Ladi Prosek <[email protected]> Co-authored-by: Mariana Dematte <[email protected]> Co-authored-by: YuliiaKovalova <[email protected]> Co-authored-by: Farhad Alizada <[email protected]>
1 parent 2bb9bbe commit f744eb5

File tree

77 files changed

+3010
-63
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+3010
-63
lines changed

MSBuild.sln

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuild.VSSetup.Arm64", "sr
8080
EndProject
8181
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Build.UnitTests.Shared", "src\UnitTests.Shared\Microsoft.Build.UnitTests.Shared.csproj", "{52A0B9C1-23B7-4CCC-B3FC-BDBA1C619E2A}"
8282
EndProject
83+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Build.BuildCheck.UnitTests", "src\BuildCheck.UnitTests\Microsoft.Build.BuildCheck.UnitTests.csproj", "{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}"
84+
EndProject
8385
Global
8486
GlobalSection(SolutionConfigurationPlatforms) = preSolution
8587
Debug|Any CPU = Debug|Any CPU
@@ -864,6 +866,30 @@ Global
864866
{52A0B9C1-23B7-4CCC-B3FC-BDBA1C619E2A}.Release|x64.Build.0 = Release|x64
865867
{52A0B9C1-23B7-4CCC-B3FC-BDBA1C619E2A}.Release|x86.ActiveCfg = Release|Any CPU
866868
{52A0B9C1-23B7-4CCC-B3FC-BDBA1C619E2A}.Release|x86.Build.0 = Release|Any CPU
869+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
870+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|Any CPU.Build.0 = Debug|Any CPU
871+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|ARM64.ActiveCfg = Debug|arm64
872+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|ARM64.Build.0 = Debug|arm64
873+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|x64.ActiveCfg = Debug|x64
874+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|x64.Build.0 = Debug|x64
875+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|x86.ActiveCfg = Debug|Any CPU
876+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Debug|x86.Build.0 = Debug|Any CPU
877+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|Any CPU.ActiveCfg = MachineIndependent|Any CPU
878+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|Any CPU.Build.0 = MachineIndependent|Any CPU
879+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|ARM64.ActiveCfg = MachineIndependent|arm64
880+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|ARM64.Build.0 = MachineIndependent|arm64
881+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|x64.ActiveCfg = MachineIndependent|x64
882+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|x64.Build.0 = MachineIndependent|x64
883+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|x86.ActiveCfg = MachineIndependent|Any CPU
884+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.MachineIndependent|x86.Build.0 = MachineIndependent|Any CPU
885+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|Any CPU.ActiveCfg = Release|Any CPU
886+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|Any CPU.Build.0 = Release|Any CPU
887+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|ARM64.ActiveCfg = Release|arm64
888+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|ARM64.Build.0 = Release|arm64
889+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|x64.ActiveCfg = Release|x64
890+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|x64.Build.0 = Release|x64
891+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|x86.ActiveCfg = Release|Any CPU
892+
{434CC6DB-1E66-4FB1-A66C-D5BBE99F0ED8}.Release|x86.Build.0 = Release|Any CPU
867893
EndGlobalSection
868894
GlobalSection(SolutionProperties) = preSolution
869895
HideSolutionNode = FALSE

eng/BootStrapMsBuild.props

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project>
2+
3+
<!--
4+
Construct a location of MSBuild bootstrap folder - to be used for deployment and for tests
5+
relying on bootstrapped MSBuild
6+
-->
7+
8+
<PropertyGroup>
9+
<BootstrapDestination>$(ArtifactsBinDir)bootstrap\</BootstrapDestination>
10+
<BootstrapDestination Condition="'$(Platform)' == 'x64' or '$(Platform)' == 'arm64'">$(BootstrapDestination)$(Platform)\</BootstrapDestination>
11+
<BootstrapDestination>$(BootstrapDestination)$(TargetFramework.ToLowerInvariant())\MSBuild\</BootstrapDestination>
12+
</PropertyGroup>
13+
14+
<PropertyGroup Condition="$(TargetFramework.StartsWith('net4'))">
15+
<BootstrapBinaryDestination>$(BootstrapDestination)$(TargetMSBuildToolsVersion)\Bin</BootstrapBinaryDestination>
16+
</PropertyGroup>
17+
18+
<PropertyGroup Condition="!$(TargetFramework.StartsWith('net4'))">
19+
<BootstrapBinaryDestination>$(BootstrapDestination)</BootstrapBinaryDestination>
20+
</PropertyGroup>
21+
</Project>

eng/BootStrapMSBuild.targets renamed to eng/BootStrapMsBuild.targets

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
-->
88

99
<PropertyGroup>
10-
<BootstrapDestination>$(ArtifactsBinDir)bootstrap\</BootstrapDestination>
11-
<BootstrapDestination Condition="'$(Platform)' == 'x64' or '$(Platform)' == 'arm64'">$(BootstrapDestination)$(Platform)\</BootstrapDestination>
12-
<BootstrapDestination>$(BootstrapDestination)$(TargetFramework.ToLowerInvariant())\MSBuild\</BootstrapDestination>
13-
1410
<BootstrapDependsOn Condition="$(TargetFramework.StartsWith('net4'))">BootstrapFull</BootstrapDependsOn>
1511
<BootstrapDependsOn Condition="!$(TargetFramework.StartsWith('net4'))">BootstrapNetCore</BootstrapDependsOn>
1612

1713
<!-- Needed to ensure that RuntimeTargetsCopyLocalItems is populated for full framework -->
1814
<DisableRuntimeTargets>false</DisableRuntimeTargets>
15+
16+
<!-- Disable build acceleration for this non-standard project. The Bootstrap target must run after any of the dependencies changes. -->
17+
<AccelerateBuildsInVisualStudio>false</AccelerateBuildsInVisualStudio>
1918
</PropertyGroup>
2019

2120
<Target Name="Bootstrap" DependsOnTargets="$(BootstrapDependsOn)"

eng/cibuild_bootstrapped_msbuild.ps1

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,12 @@ try {
115115

116116
# When using bootstrapped MSBuild:
117117
# - Turn off node reuse (so that bootstrapped MSBuild processes don't stay running and lock files)
118-
# - Do run tests
119-
# - Don't try to create a bootstrap deployment
118+
# - Create bootstrap environment as it's required when also running tests
120119
if ($onlyDocChanged) {
121120
& $PSScriptRoot\Common\Build.ps1 -restore -build -ci /p:CreateBootstrap=false /nr:false @properties
122121
}
123122
else {
124-
& $PSScriptRoot\Common\Build.ps1 -restore -build -test -ci /p:CreateBootstrap=false /nr:false @properties
123+
& $PSScriptRoot\Common\Build.ps1 -restore -build -test -ci /p:CreateBootstrap=true /nr:false @properties
125124
}
126125

127126
exit $lastExitCode

eng/cibuild_bootstrapped_msbuild.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,10 @@ export DOTNET_HOST_PATH="$_InitializeDotNetCli/dotnet"
8080

8181
# When using bootstrapped MSBuild:
8282
# - Turn off node reuse (so that bootstrapped MSBuild processes don't stay running and lock files)
83-
# - Do run tests
84-
# - Don't try to create a bootstrap deployment
83+
# - Create bootstrap environment as it's required when also running tests
8584
if [ $onlyDocChanged = 0 ]
8685
then
87-
. "$ScriptRoot/common/build.sh" --restore --build --test --ci --nodereuse false --configuration $configuration /p:CreateBootstrap=false $properties $extra_properties
86+
. "$ScriptRoot/common/build.sh" --restore --build --test --ci --nodereuse false --configuration $configuration /p:CreateBootstrap=true $properties $extra_properties
8887

8988
else
9089
. "$ScriptRoot/common/build.sh" --restore --build --ci --nodereuse false --configuration $configuration /p:CreateBootstrap=false $properties $extra_properties

src/Build.UnitTests/BackEnd/MockHost.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Build.BackEnd;
66
using Microsoft.Build.BackEnd.Logging;
77
using Microsoft.Build.BackEnd.SdkResolution;
8+
using Microsoft.Build.BuildCheck.Infrastructure;
89
using Microsoft.Build.Engine.UnitTests.BackEnd;
910
using Microsoft.Build.Evaluation;
1011
using Microsoft.Build.Execution;
@@ -61,6 +62,8 @@ internal sealed class MockHost : MockLoggingService, IBuildComponentHost, IBuild
6162

6263
private ISdkResolverService _sdkResolverService;
6364

65+
private IBuildCheckManagerProvider _buildCheckManagerProvider;
66+
6467
#region SystemParameterFields
6568

6669
#endregion;
@@ -126,6 +129,9 @@ public MockHost(BuildParameters buildParameters, ConfigCache overrideConfigCache
126129

127130
_sdkResolverService = new MockSdkResolverService();
128131
((IBuildComponent)_sdkResolverService).InitializeComponent(this);
132+
133+
_buildCheckManagerProvider = new NullBuildCheckManagerProvider();
134+
((IBuildComponent)_buildCheckManagerProvider).InitializeComponent(this);
129135
}
130136

131137
/// <summary>
@@ -194,6 +200,7 @@ public IBuildComponent GetComponent(BuildComponentType type)
194200
BuildComponentType.ResultsCache => (IBuildComponent)_resultsCache,
195201
BuildComponentType.RequestBuilder => (IBuildComponent)_requestBuilder,
196202
BuildComponentType.SdkResolverService => (IBuildComponent)_sdkResolverService,
203+
BuildComponentType.BuildCheckManagerProvider => (IBuildComponent)_buildCheckManagerProvider,
197204
_ => throw new ArgumentException("Unexpected type " + type),
198205
};
199206
}

src/Build/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#endif
2020
[assembly: InternalsVisibleTo("Microsoft.Build.Framework.UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")]
2121
[assembly: InternalsVisibleTo("Microsoft.Build.Engine.UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")]
22+
[assembly: InternalsVisibleTo("Microsoft.Build.BuildCheck.UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")]
2223
[assembly: InternalsVisibleTo("Microsoft.Build.UnitTests.Shared, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")]
2324
[assembly: InternalsVisibleTo("Microsoft.Build.Conversion.Core, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")]
2425
[assembly: InternalsVisibleTo("Microsoft.Build.Conversion.Unittest, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")]

src/Build/BackEnd/BuildManager/BuildManager.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@
2121
using Microsoft.Build.BackEnd;
2222
using Microsoft.Build.BackEnd.Logging;
2323
using Microsoft.Build.BackEnd.SdkResolution;
24+
using Microsoft.Build.BuildCheck.Infrastructure;
25+
using Microsoft.Build.BuildCheck.Logging;
2426
using Microsoft.Build.Evaluation;
2527
using Microsoft.Build.Eventing;
2628
using Microsoft.Build.Exceptions;
2729
using Microsoft.Build.Experimental;
30+
using Microsoft.Build.Experimental.BuildCheck;
2831
using Microsoft.Build.Experimental.ProjectCache;
2932
using Microsoft.Build.FileAccesses;
3033
using Microsoft.Build.Framework;
@@ -2952,7 +2955,12 @@ private void OnProjectStarted(object sender, ProjectStartedEventArgs e)
29522955
/// <summary>
29532956
/// Creates a logging service around the specified set of loggers.
29542957
/// </summary>
2955-
private ILoggingService CreateLoggingService(IEnumerable<ILogger> loggers, IEnumerable<ForwardingLoggerRecord> forwardingLoggers, ISet<string> warningsAsErrors, ISet<string> warningsNotAsErrors, ISet<string> warningsAsMessages)
2958+
private ILoggingService CreateLoggingService(
2959+
IEnumerable<ILogger> loggers,
2960+
IEnumerable<ForwardingLoggerRecord> forwardingLoggers,
2961+
ISet<string> warningsAsErrors,
2962+
ISet<string> warningsNotAsErrors,
2963+
ISet<string> warningsAsMessages)
29562964
{
29572965
Debug.Assert(Monitor.IsEntered(_syncLock));
29582966

@@ -2976,6 +2984,18 @@ private ILoggingService CreateLoggingService(IEnumerable<ILogger> loggers, IEnum
29762984
loggingService.WarningsNotAsErrors = warningsNotAsErrors;
29772985
loggingService.WarningsAsMessages = warningsAsMessages;
29782986

2987+
if (_buildParameters.IsBuildCheckEnabled)
2988+
{
2989+
var buildCheckManagerProvider =
2990+
((IBuildComponentHost)this).GetComponent(BuildComponentType.BuildCheckManagerProvider) as IBuildCheckManagerProvider;
2991+
buildCheckManagerProvider!.Instance.SetDataSource(BuildCheckDataSource.EventArgs);
2992+
2993+
loggers = (loggers ?? Enumerable.Empty<ILogger>()).Concat(new[]
2994+
{
2995+
new BuildCheckConnectorLogger(new AnalyzerLoggingContextFactory(loggingService), buildCheckManagerProvider.Instance)
2996+
});
2997+
}
2998+
29792999
try
29803000
{
29813001
if (loggers != null)

src/Build/BackEnd/BuildManager/BuildParameters.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
using Microsoft.Build.BackEnd;
1111
using Microsoft.Build.Collections;
1212
using Microsoft.Build.Evaluation;
13+
using Microsoft.Build.Experimental;
14+
using Microsoft.Build.Experimental.BuildCheck;
1315
using Microsoft.Build.Experimental.ProjectCache;
1416
using Microsoft.Build.Framework;
1517
using Microsoft.Build.Graph;
@@ -207,6 +209,8 @@ public class BuildParameters : ITranslatable
207209

208210
private bool _question;
209211

212+
private bool _isBuildCheckEnabled;
213+
210214
/// <summary>
211215
/// The settings used to load the project under build
212216
/// </summary>
@@ -309,6 +313,7 @@ internal BuildParameters(BuildParameters other, bool resetEnvironment = false)
309313
DiscardBuildResults = other.DiscardBuildResults;
310314
LowPriority = other.LowPriority;
311315
Question = other.Question;
316+
IsBuildCheckEnabled = other.IsBuildCheckEnabled;
312317
ProjectCacheDescriptor = other.ProjectCacheDescriptor;
313318
}
314319

@@ -834,6 +839,15 @@ public bool Question
834839
set => _question = value;
835840
}
836841

842+
/// <summary>
843+
/// Gets or sets an indication of build analysis enablement.
844+
/// </summary>
845+
public bool IsBuildCheckEnabled
846+
{
847+
get => _isBuildCheckEnabled;
848+
set => _isBuildCheckEnabled = value;
849+
}
850+
837851
/// <summary>
838852
/// Gets or sets the project cache description to use for all <see cref="BuildSubmission"/> or <see cref="GraphBuildSubmission"/>
839853
/// in addition to any potential project caches described in each project.
@@ -898,6 +912,7 @@ void ITranslatable.Translate(ITranslator translator)
898912
translator.TranslateEnum(ref _projectLoadSettings, (int)_projectLoadSettings);
899913
translator.Translate(ref _interactive);
900914
translator.Translate(ref _question);
915+
translator.Translate(ref _isBuildCheckEnabled);
901916
translator.TranslateEnum(ref _projectIsolationMode, (int)_projectIsolationMode);
902917
translator.Translate(ref _reportFileAccesses);
903918

src/Build/BackEnd/Components/BuildComponentFactoryCollection.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Collections.Generic;
55
using Microsoft.Build.BackEnd.Components.Caching;
66
using Microsoft.Build.BackEnd.SdkResolution;
7+
using Microsoft.Build.BuildCheck.Infrastructure;
78
using Microsoft.Build.FileAccesses;
89
using Microsoft.Build.Shared;
910

@@ -76,6 +77,8 @@ public void RegisterDefaultFactories()
7677
// NodeEndpoint,
7778
_componentEntriesByType[BuildComponentType.LoggingService] = new BuildComponentEntry(BuildComponentType.LoggingService, null);
7879
_componentEntriesByType[BuildComponentType.RequestBuilder] = new BuildComponentEntry(BuildComponentType.RequestBuilder, RequestBuilder.CreateComponent, CreationPattern.CreateAlways);
80+
// This conditionally registers real or no-op implementation based on BuildParameters
81+
_componentEntriesByType[BuildComponentType.BuildCheckManagerProvider] = new BuildComponentEntry(BuildComponentType.BuildCheckManagerProvider, BuildCheckManagerProvider.CreateComponent, CreationPattern.Singleton);
7982
_componentEntriesByType[BuildComponentType.TargetBuilder] = new BuildComponentEntry(BuildComponentType.TargetBuilder, TargetBuilder.CreateComponent, CreationPattern.CreateAlways);
8083
_componentEntriesByType[BuildComponentType.TaskBuilder] = new BuildComponentEntry(BuildComponentType.TaskBuilder, TaskBuilder.CreateComponent, CreationPattern.CreateAlways);
8184
_componentEntriesByType[BuildComponentType.RegisteredTaskObjectCache] = new BuildComponentEntry(BuildComponentType.RegisteredTaskObjectCache, RegisteredTaskObjectCache.CreateComponent, CreationPattern.Singleton);

0 commit comments

Comments
 (0)