/preprocess (/pp)
Since you can import other MSBuild files using the Import Element sometimes locating where a target, property or item is being defined can lead to a search that takes you through several files. It can be even more confusing if more than 1 file defines the property or target that you are interested in, because you may have thought that you found the right target but you may one that was overridden by another file. Now with MSBuild 4.0 you don’t have to search through all of those files. You can use the switch /preprocess switch. Here is the snippet from msbuild.exe /? describing it.
/preprocess[:file] Creates a single, aggregated project file by inlining all the files that would be imported during a build, with their boundaries marked. This can be useful for figuring out what files are being imported and from where, and what they will contribute to the build. By default the output is written to the console window. If the path to an output file is provided that will be used instead. (Short form: /pp) Example: /pp:out.txt
When you use this the full logical project file is dumped to the console, or optionally to a file, and it includes references to where the elements are defined. For example I created the following very simple project files.
import-01.proj
import-02.proj
master.proj
After executing the command msbuild.exe master.proj /pp:out.xml the following was written to the out.xml file.
As you can see with /pp it is very easy to see exactly what is defined where and at what location.
/detailedsummary (/ds)
Another new feature with MSBuild 4.0 is the /detailedsummary (/ds) command line switch. When you use this switch you will be shown a detailed summary (haha) of build execution. This summary includes the amount of time spent build each project file as well as the node utilization. I just preformed a build with the command msbuild RuleStack.Engine.sln /m /ds and the summary is shown below.
============================== Build Hierarchy (IDs represent configurations) ===================================================== Id : Exclusive Time Total Time Path (Targets) ----------------------------------------------------------------------------------------------------------------------------------- 0 : 0.020s 1.211s C:\...\RuleStack.Engine.sln () | 1 : 0.667s 0.667s C:\...\RuleStack.Engine.Common\RuleStack.Engine.Common.csproj () | 3 : 0.255s 0.718s C:\...\Unittest\RuleStack.Engine.Tests\RuleStack.Engine.Tests.csproj () | | 6 : 0.000s 0.000s C:\...\ObjectBinder\RuleStack.ObjectBinder\RuleStack.ObjectBinder .csproj () | | 5 : 0.000s 0.000s C:\...\RuleStack.Data\RuleStack.Data.csproj () | | 1 : 0.000s 0.000s C:\...\RuleStack.Engine.Common\RuleStack.Engine.Common.csproj () | | 2 : 0.000s 0.000s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( ) | | 8 : 0.292s 0.460s C:\...\RuleStack.Engine.Admin.Web\RuleStack.Engine.Admin.Web.csproj () | | | 24 : 0.000s 0.000s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( GetNativeManifest) | | | 5 : 0.000s 0.000s C:\...\RuleStack.Data\RuleStack.Data.csproj () | | . 2 : 0.000s 0.000s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( ) | . 36 : 0.003s 0.003s C:\...\RuleStack.Engine.Admin.Web\RuleStack.Engine.Admin.Web.csproj (GetNativeManifest) | 2 : 0.319s 0.390s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( ) | | 6 : 0.000s 0.000s C:\...\ObjectBinder\RuleStack.ObjectBinder\RuleStack.ObjectBinder.csproj () | | 5 : 0.000s 0.000s C:\...\RuleStack.Data\RuleStack.Data.csproj () | | 17 : 0.002s 0.002s C:\...\RuleStack.Data\RuleStack.Data.csproj (GetNativeManifest) | . 21 : 0.001s 0.001s C:\...\RuleStack.Data\RuleStack.Data.csproj (GetCopyToOutputDirectoryItems) | 4 : 0.382s 0.567s C:\...\RuleStack.Services\RuleStack.Services.csproj () | | 5 : 0.000s 0.000s C:\...\RuleStack.Data\RuleStack.Data.csproj () | | 2 : 0.000s 0.000s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( ) | | 24 : 0.002s 0.002s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( GetNativeManifest) | . 29 : 0.001s 0.001s C:\...\RuleStack.Engine.Backend\RuleStack.Engine.Backend.csproj ( GetCopyToOutputDirectoryItems) | 7 : 0.333s 0.337s C:\...\ObjectBinder\Test_RuleStack.ObjectBinder\Test_RuleStack.ObjectBinder.csproj () | | 6 : 0.000s 0.000s C:\...\ObjectBinder\RuleStack.ObjectBinder\RuleStack.ObjectBinder.csproj () | | 13 : 0.001s 0.001s C:\...\ObjectBinder\RuleStack.ObjectBinder\RuleStack.ObjectBinder.csproj (GetNativeManifest) | . 19 : 0.001s 0.001s C:\...\ObjectBinder\RuleStack.ObjectBinder\RuleStack.ObjectBinder.csproj (GetCopyToOutputDirectoryItems) | 6 : 0.210s 0.210s C:\...\ObjectBinder\RuleStack.ObjectBinder\RuleStack.ObjectBinder.csproj () | 5 : 0.277s 0.277s C:\...\RuleStack.Data\RuleStack.Data.csproj () | . 12 : 0.000s 0.000s C:\...\RuleStack.Engine.Common\RuleStack.Engine.Common.csproj (GetNativeManifest) . 43 : 0.002s 0.002s C:\...\RuleStack.Engine.Admin.Web\RuleStack.Engine.Admin.Web.csproj.metaproj () ============================== Node Utilization (IDs represent configurations) ==================================================== Timestamp: 1 2 3 4 5 6 7 8 Duration Cumulative ----------------------------------------------------------------------------------------------------------------------------------- 634081842447519669: 0 x x x x x x x 0.018s 0.018s 634081842447699679: 1 x x x x x x x 0.461s 0.479s ######### 634081842452309943: | 6 7 5 3 4 2 x 0.130s 0.609s ## 634081842453610018: | | | | 8 | | x 0.086s 0.695s # 634081842454470067: | | | | | | | x 0.001s 0.696s 634081842454480067: x | | | | | | x 0.001s 0.697s 634081842454490068: x | x | | x | x 0.001s 0.698s 634081842454500068: x | x | | x x x 0.001s 0.699s 634081842454510069: x x 7 | | x x x 0.002s 0.701s 634081842454530070: 12 x | | | x x x 0.002s 0.703s 634081842454550071: | 13 x | | x x x 0.001s 0.704s 634081842454560072: | x 7 | | x x x 0.008s 0.712s 634081842454640076: | x | | x x x x 0.054s 0.766s # 634081842455180107: | x | x x x 2 x 0.003s 0.769s 634081842455210109: | x | 17 x x x x 0.002s 0.771s 634081842455230110: | x | x x x 2 x 0.036s 0.807s 634081842455590131: | 19 x x x x | x 0.001s 0.808s 634081842455600131: | x 7 x x x | x 0.018s 0.826s 634081842455780142: | x x x x x | x 0.036s 0.862s 634081842456140162: | x x 21 x x x x 0.001s 0.863s 634081842456150163: | x x x x x 2 x 0.016s 0.879s 634081842456310172: | x x x 8 4 x x 0.003s 0.882s 634081842456340174: | x x x | x 24 x 0.001s 0.883s 634081842456350174: | x x x x x | x 0.001s 0.884s 634081842456360175: | x x x 8 4 x x 0.148s 1.032s ## 634081842457840259: | x x x | x 29 x 0.001s 1.033s 634081842457850260: | x x x | 4 x x 0.023s 1.056s 634081842458080273: | x x x | x x x 0.013s 1.069s 634081842458210281: | x x x 3 x x x 0.004s 1.073s 634081842458250283: | x x x 36 x x x 0.003s 1.076s 634081842458280285: | x x x 3 x x x 0.131s 1.207s ## 634081842459590360: 0 x x x x x x x 0.001s 1.208s 634081842459600360: 43 x x x x x x x 0.002s 1.210s 634081842459620361: 0 x x x x x x x 0.001s 1.211s ----------------------------------------------------------------------------------------------------------------------------------- Utilization: 57.8 30.3 46.9 39.6 76.5 53.6 45.4 .0 Average Utilization: 43.8
In the snippet above you should know that I replace the path to the files with … to reduce the width of the output. Also the machine that I’m currently using has 8 cores so it shows 8 nodes, on your machine you may have a different number of columns for the node utilization table.
Sayed Ibrahim Hashimi
Comments are closed.