Do the 1>, 2>, 3> symbols in msbuild output stand for threads?

Viewed 53

I recently turned on normal logging verbosity for msbuild to debug some build issues. I use the -m -graph arguments and am building a solution that contains 3 projects. One project is a MyProjectlibrary, one is a MyProjectTests test project that calls the library, and the third project is a MyProjectConsole app that calls the library.

I expect msbuild to build a dependency graph (because of -m -graph) that builds the library first, followed by the test project and console app projects.

Here is an example output of the build. I don't know what the 2>, 3>, 1> symbols mean.

Q. Do they indicate threads in the parallel build, or maybe node numbers in the 3-node graph, or do they indicate a build order ranking?

Q. Do the indentation of lines below 2> indicate those are log messages belong to the 2> thread, and do the interleaved 2> 2> 3> 3> 1> 2> blocks indicate chunks of msbuild log output from threads running in parallel and sending their output to a single log collection thread?

Thank you

In the following log output: HsLog is the console program and is built on 'node 1'. (CPU core 1? Graph node 1?) HsLoggerTests is the unit test project and is built on 'node 2'. HsLogger is the library and is built on 'node

Build started 2022-05-21 07:33:46. Static graph loaded in 0.471 seconds: 3 nodes, 2 edges

 2>Project "c:\dev\highspeed\HsLogger\HsLog\HsLog.csproj" on node 1 (Restore;Publish target(s)).
 2>_GetAllRestoreProjectPathItems:
     Determining projects to restore...

 3>Project "c:\dev\highspeed\HsLogger\HsLoggerTests\HsLoggerTests.csproj" on node 2 (Restore;Publish target(s)).
 3>_GetAllRestoreProjectPathItems:
     Determining projects to restore...

 2>Restore:
     Committing restore...
     Assets file has not changed. Skipping assets file writing. Path: c:\dev\highspeed\HsLogger\HsLogger\obj\project.assets.json
     Restored c:\dev\highspeed\HsLogger\HsLogger\HsLogger.csproj (in 59 ms).
     Committing restore...
     Assets file has not changed. Skipping assets file writing. Path: c:\dev\highspeed\HsLogger\HsLog\obj\project.assets.json
     Restored c:\dev\highspeed\HsLogger\HsLog\HsLog.csproj (in 57 ms).
     
     NuGet Config files used:
         C:\Users\kkkwj\AppData\Roaming\NuGet\NuGet.Config
         C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config
     
     Feeds used:
         https://api.nuget.org/v3/index.json
         C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
     All projects are up-to-date for restore.
 
 2>Project "c:\dev\highspeed\HsLogger\HsLog\HsLog.csproj" (2) is building "c:\dev\highspeed\HsLogger\HsLogger\HsLogger.csproj" (1:11) on node 1 (default targets).

 1>GenerateTargetFrameworkMonikerAttribute:
   Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
   CoreGenerateAssemblyInfo:
   Skipping target "CoreGenerateAssemblyInfo" because all output files are up-to-date with respect to the input files.
   CoreCompile:
   Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
   GenerateBuildDependencyFile:
   Skipping target "GenerateBuildDependencyFile" because all output files are up-to-date with respect to the input files.
   CopyFilesToOutputDirectory:
     HsLogger -> c:\dev\highspeed\HsLogger\HsLogger\bin\Debug\net5.0-windows7.0\win-x64\HsLogger.dll
   PostBuild:
     set bindir=%holding%\lib\core\AnyCPU\Debug\net5.0-windows7.0       

 3>Restore:
     Committing restore...
     Assets file has not changed. Skipping assets file writing. Path: c:\dev\highspeed\HsLogger\HsLogger\obj\project.assets.json
     Restored c:\dev\highspeed\HsLogger\HsLogger\HsLogger.csproj (in 58 ms).
     Committing restore...
     Assets file has not changed. Skipping assets file writing. Path: c:\dev\highspeed\HsLogger\HsLoggerTests\obj\project.assets.json
     Restored c:\dev\highspeed\HsLogger\HsLoggerTests\HsLoggerTests.csproj (in 57 ms).
     
     NuGet Config files used:
         C:\Users\kkkwj\AppData\Roaming\NuGet\NuGet.Config
         C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config
     
     Feeds used:
         https://api.nuget.org/v3/index.json
         C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
     All projects are up-to-date for restore.

 3>Done Building Project "c:\dev\highspeed\HsLogger\HsLoggerTests\HsLoggerTests.csproj" (Restore;Publish target(s)).


 1>PostBuild:

 1>Done Building Project "c:\dev\highspeed\HsLogger\HsLogger\HsLogger.csproj" (default targets).

 2>GenerateTargetFrameworkMonikerAttribute:
   Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
   CoreGenerateAssemblyInfo:
   Skipping target "CoreGenerateAssemblyInfo" because all output files are up-to-date with respect to the input files.
   CoreCompile:
   Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
   _CreateAppHost:
   Skipping target "_CreateAppHost" because all output files are up-to-date with respect to the input files.
   _CopyOutOfDateSourceItemsToOutputDirectory:
   Skipping target "_CopyOutOfDateSourceItemsToOutputDirectory" because all output files are up-to-date with respect to the input files.
   GenerateBuildDependencyFile:
   Skipping target "GenerateBuildDependencyFile" because all output files are up-to-date with respect to the input files.
   GenerateBuildRuntimeConfigurationFiles:
   Skipping target "GenerateBuildRuntimeConfigurationFiles" because all output files are up-to-date with respect to the input files.
   CopyFilesToOutputDirectory:
     HsLog -> c:\dev\highspeed\HsLogger\HsLog\bin\Debug\net5.0-windows7.0\win-x64\HsLog.dll
   PostBuild:
   _CopyResolvedFilesToPublishPreserveNewest:
   Skipping target "_CopyResolvedFilesToPublishPreserveNewest" because all output files are up-to-date with respect to the input files.
   Publish:
     HsLog -> c:\dev\highspeed\HsLogger\HsLog\bin\Debug\net5.0-windows7.0\win-x64\publish\

 2>Done Building Project "c:\dev\highspeed\HsLogger\HsLog\HsLog.csproj" (Restore;Publish target(s)).
1 Answers

The numbers are a 'project key'. They are generated per build and within a build are unique per project.

The numbers do indicate parallel processing and identify chunks of messages that have been gathered in a centralized logger. But the numbers are not the nodes.

An 'MSBuild node' is an isolated process for handling processing in parallel. A node may be re-used by multiple projects.

Your build appears to use 2 nodes. HsLog.csproj (project key of 2) starts building on node 1. HsLoggerTests.csproj (key of 3) starts building on node 2. HsLog.csproj has a dependency on HsLogger.csproj (key of 1) and starts building HsLogger.csproj on node 1.

Related