Basic.CompilerLog.Util 0.7.1

dotnet add package Basic.CompilerLog.Util --version 0.7.1
NuGet\Install-Package Basic.CompilerLog.Util -Version 0.7.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Basic.CompilerLog.Util" Version="0.7.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Basic.CompilerLog.Util --version 0.7.1
#r "nuget: Basic.CompilerLog.Util, 0.7.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Basic.CompilerLog.Util as a Cake Addin
#addin nuget:?package=Basic.CompilerLog.Util&version=0.7.1

// Install Basic.CompilerLog.Util as a Cake Tool
#tool nuget:?package=Basic.CompilerLog.Util&version=0.7.1

Compiler Logs

codecov

This is the repository for creating and consuming compiler log files. These are files created from a MSBuild binary log that contain information necessary to recreate all of the Compilation instances from that build.

The compiler log files are self contained. They must be created on the same machine where the binary log was created but after creation they can be freely copied between machines. That enables a number of scenarios:

  1. GitHub pipelines can cleanly separate build and build analysis into different legs. The analysis can be done on a separate machine entirely independent of where the build happens.
  2. Allows for easier customer investigations by the C# / VB compiler teams. Instead of trying to re-create a customer build environment, customers can provide a compiler log file that developers can easily open with a call to the API.

complog

This global tool can be installed via

dotnet tool install --global complog

From there the following commands are available:

  • create: create a complog file from an existing binary log
  • replay: replay the builds from the complog
  • export: export complete compilations to disk
  • ref: export references for a compilation to disk
  • rsp: generate rsp files for compilation events
  • print: print the summary of a complog on the command line

Info

⚠️ A compiler log will include potentially sensitive artifacts ⚠️

A compiler log file contains all of the information necessary to recreate a Compilation. That includes all source, resources, references, strong name keys, etc .... That will be visible to anyone you provide a compiler log to.

Creating Compiler Logs

There are a number of ways to create a compiler log. The first step is to install the complog global tool as that will be used to create the compiler log.

> dotnet tool install -g complog

The easiest is to create it off of a binary log file from a previous build.

> msbuild -bl MySolution.sln
> complog create msbuild.binlog

By default this will include every project in the binary log. If there are a lot of projects this can produce a large compiler log. You can use the -p option to limit the compiler log to a specific set of projects.

> complog create msbuild.binlog -p MyProject.csproj

For solutions or projects that can be built with dotnet build a compiler log can be created by just running create against the solution or project file directly.

> complog create MyProject.csproj

When trying to get a compiler log from a build that occurs in a GitHub action you can use the complog-action action to simplify creating and uploading the compiler log.

  - name: Build .NET app
    run: dotnet build -bl

  - name: Create and upload the compiler log
    uses: jaredpar/compilerlog-action@v1
    with:
      binlog: msbuild.binlog

Debugging Compiler Logs

Running locally

To re-run all of the compilations in a compiler log use the replay command

> complog replay build.complog
Microsoft.VisualStudio.IntegrationTest.IntegrationService.csproj (net472) ...Success
Roslyn.Test.Performance.Utilities.csproj (net472) ...Success
Microsoft.CodeAnalysis.XunitHook.csproj (net472) ...Success

Passing the -export argument will cause all failed compilations to be exported to the local disk for easy analysis.

Debugging in Visual Studio

To debug a compilation in Visual Studio first export it to disk:

> complog export build.complog

That will write out all the artifacts necessary to run a command line build to disk. Use the --project option to limit the output to specific projects. For each project it will generate a build.rsp command that uses the exported arguments. It will also generate several build*.cmd files. Those will execute dotnet exec csc.dll @build.rsp on the build for every SDK installed on the machine.

example of export output

The next step is to setup csc / vbc to use the build.rsp file for debugging. Open the debug settings for csc / vbc and set them to have the argument @build.rsp and make the working directory the location of that file.

example of debug settnigs

Then launch csc / vbc and it will debug that project.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 is compatible.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.7.1 43 4/25/2024
0.7.0 47 4/25/2024
0.6.1 118 2/27/2024
0.6.0 83 2/21/2024
0.5.10 94 1/30/2024
0.5.9 74 1/29/2024
0.5.8 76 1/26/2024
0.5.7 129 12/26/2023
0.5.6 75 12/26/2023
0.5.5 122 12/21/2023
0.5.4 110 12/21/2023
0.5.3 120 12/12/2023
0.5.2 83 11/29/2023
0.5.1 54 11/28/2023
0.5.0 148 11/1/2023
0.4.1 124 9/26/2023
0.4.0 118 9/25/2023
0.3.8 117 9/25/2023
0.3.7 114 9/1/2023
0.3.6 135 8/16/2023
0.3.5 148 8/2/2023
0.3.4 191 6/29/2023
0.3.2 143 6/28/2023
0.3.1 137 6/28/2023
0.3.0 142 6/22/2023
0.2.9 144 5/31/2023
0.2.8 151 5/24/2023
0.2.7 153 5/11/2023
0.2.6 1,309 4/10/2023
0.2.5 194 3/16/2023