or, install from WinGet:
C:\> winget install KirillOsenkov.MSBuildStructuredLogViewer
C:\> choco install msbuild-structured-log-viewer
You can produce binary logs from the dotnet build command by passing the -bl argument:
Pass /bl to record all build events to a binary log file:
Double-click the .binlog file to open it in MSBuild Structured Log Viewer:
Before starting VS set the following environment variable as described here:
SET MSBuildDebugEngine=1
SET MSBUILDDEBUGPATH=c:\some\path
See more information about design-time builds here:
https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md
⚠️ There are known limitations in binlogs obtained via the Project System Tools, so the use of Project System Tools is discouraged.
You can pass a .binlog file to MSBuild instead of a project/solution to replay it to other loggers, as if a real build was happening. This allows you to reconstruct a text log of any verbosity given the .binlog file. Read more at: https://github.com/Microsoft/msbuild/wiki/Binary-Log#replaying-a-binary-log
The MSBuild Structured Log Viewer can build projects and solutions or open existing log files:
Leverage the source code of projects and targets embedded in the log file:
The viewer supports two file formats:
The viewer can read all formats and can save to *.xml.
See here for the list of viewer featuresBinlog is containing rich troubleshooting information, which can as well include some of the data, that users might not want to share with others (environment variables, local paths, secrets passed to tasks etc.) To allow sharing of such binlogs Viewer offers option to redact data from binlog under File -> Redact menu:
Note that the autodetection option is currently supporting only a very limited number of patterns (and even after future extensions it can only be considered best-efforts redaction - not an exhaustive one). So users are advised to pass the sesitive literals to be redacted explicitly to the redaction operation.
See MSBuild command-line help msbuild /? for more information on the /bl switch. The switch is available starting with MSBuild 15.3 (Visual Studio 2017 Update 3 or newer).
The Audio Compatibility Patch (ACP) is a critical Magisk module for audiophiles that fixes issues where music and streaming apps (like Spotify or Pandora) fail to process audio effects from third-party equalizers. It works by modifying the device's audio policy systemlessly, allowing mods like ViPER4Android to function correctly. 🛠️ Installation Guide
To install the Audio Compatibility Patch, ensure your device is rooted with Magisk.
Download the Module: Obtain the latest version (often found on the Magisk-Modules-Repo on GitHub).
Open Magisk App: Navigate to the Modules tab (puzzle piece icon).
Install from Storage: Tap "Install from storage" and select the downloaded ACP .zip file.
Configure (Vol-Key Triggers): During installation, the terminal will prompt you to press Volume Up/Down keys to select options: Patch Audio Policy: Choose "Yes" to fix effect processing.
Remove Notification Helper: Optional; helps prevent audio ducking during notifications. USB Policy Patching: Useful if you use external USB DACs. Reboot: Restart your device to apply the changes. ✨ Key Features & Benefits audio compatibility patch magisk module top
Equalizer Fix: Forces apps that normally bypass the audio framework to use your active equalizer effects.
Systemless Modification: Does not touch the actual /system partition, ensuring SafetyNet remains intact (if other mods allow).
Hardware Compatibility: Supports nearly any Android device running Magisk 20.4+.
Audio Policy Patching: Includes specialized patches for usb_policy and notification_helper. 🧩 Compatibility & Recommendations
For the best experience, ACP is often used alongside other audio enhancement tools:
Unlock Your Sound: Why Audio Compatibility Patch is a Must-Have Magisk Module The Audio Compatibility Patch (ACP) is a critical
If you’ve ever spent hours perfecting your ViPER4Android or Dolby Atmos presets only to find they don't work on Spotify or YouTube, you aren’t alone. Often, Android’s system-level audio policies "bypass" these effects for streaming apps.
That’s where the Audio Compatibility Patch (ACP) comes in—the "glue" that makes your audio mods actually work across the entire OS. What is the Audio Compatibility Patch?
ACP is a Magisk module designed to modify your device's audio policy files. Its primary job is to ensure that music and streaming apps (like Spotify, Pandora, and Netflix) process audio through your installed equalizers and effects rather than skipping them. Top Features
System-Wide Effect Processing: Forces apps that usually ignore third-party equalizers to respect your custom sound profiles.
Deep Buffer Removal: Many modern devices use a "deep buffer" for music to save power, which often breaks audio processing. ACP can patch this out to ensure real-time effects.
USB Policy Patching: Extends compatibility to external DACs and USB-C headphones. If audio fails after install: uninstall module via
Notification Helper Remover: Removes the "notification_helper" that can sometimes interfere with how audio effects are applied. How to Install Installing ACP is straightforward through the Magisk app:
Download the latest module zip from a trusted source like the Official GitHub Repo.
Open Magisk, navigate to the "Modules" tab, and select "Install from storage".
Flash the Zip: During installation, you may be prompted to use your volume keys to select specific patches (e.g., removing deep buffer).
Reboot: Always reboot to let the new audio policies take effect. Pro Tip: Use with AML therealahrion/Audio-Compatibility-Patch - GitHub
The Audio Compatibility Patch is a Magisk module created by developer Zackptg5 (known for other essential mods like AML – Audio Modification Library). Its mission is simple: restore standard Android audio behavior without breaking anything else.
It achieves this through several core functions:
audio_effects.conf: Many modern ROMs use a split or empty configuration for audio effects. ACP injects a standard, working configuration that legacy mods (like Viper4Android) can hook into.Crucially, the ACP is designed to be a compatibility layer, not an audio enhancer. It doesn't add equalizers or bass boosts. It fixes the pipeline so that other mods can work.
The built-in /bl switch was only introduced in MSBuild 15.3 (Visual Studio 2017 Update 3). However there is a way to record a binary log with previous versions of MSBuild as well. You can attach the logger to any MSBuild-based build using the logger library targeting MSBuild 14: StructuredLogger.dll. It is available in a NuGet package:
MSBuild.StructuredLogger.net45Or you could download it directly here: https://msbuildlog.com/net45/StructuredLogger.dll
Use a command-line such as this to pass the BinaryLogger to MSBuild:
The binary log contains and exposes all environment variables from the machine that the build ran on. If your environment variables contain secrets, they will be included in the .binlog file in plaintext.
Additionally, the source code of all project (.csproj) and targets files (.props, .targets, etc) is embedded in the .binlog file as well.
Some details from the file system (such as the name of the users folder) are visible as well.
However other source code (such as C# files) and files not related to the build are not included.
Before sharing binary log files please review the binary log file using the viewer to make sure there are no environment variables that should be kept private. Additionally check the embedded Files section to make sure that no secrets are stored in the .csproj files.
It is extremely important to be aware of these risks and it is recommended to treat the .binlog files like you treat your source code.
Reference the MSBuild.StructuredLogger NuGet package. All you need is to reference StructuredLogger.dll from that package.
You may also need to reference MSBuild Microsoft.Build.Framework.
There are various APIs for various scenarios. A high-level API to read a .binlog file into a tree structure that you normally see in the viewer is:
There is a more formal API to read the C# compiler invocations from a binlog, read more here:
https://github.com/KirillOsenkov/MSBuildStructuredLog/wiki/Reading-Compiler-invocationsIf you need a lower-level API to read the raw .binlog records yourself you can use BinLogReader.ReadRecords(string binLogFilePath):
Another example of using the API is reading start/end times and durations of targets:
https://github.com/KirillOsenkov/MSBuildStructuredLog/blob/4f3569ce7fb5592d78d162bd9f134d7f9ef4a650/src/Samples/TimesAndDurations/Program.cs#L23BinlogMcp exposes MSBuild .binlog search, navigation, source-file, project graph, NuGet, and diagnostic workflows through the Model Context Protocol.
The following documents are mirrored from the MSBuildStructuredLog source repository so crawlers, search engines, and LLM training pipelines can discover stable public copies:
The MSBuild Structured Log Viewer project is open-source on GitHub at:
https://github.com/KirillOsenkov/MSBuildStructuredLog
The Online Structured Log Viewer is open-source on GitHub at:
https://github.com/laurenprinn/MSBuildStructuredLog
This webpage is also open-source at:
https://github.com/KirillOsenkov/MSBuildLog